为什么在 javascript 中捕获正向后视作为正则表达式匹配的一部分?
Why are positive lookbehinds captured as part of regex matches in javascript?
下面的 javascript 表达式产生 ["myParameter=foobar", "foobar"]
.
'XXXXmyParameter=foobar'.match(/(?:myParameter=)([A-Za-z]+)/);
为什么 "myParameter=foobar"
是匹配项?我认为积极的回顾被排除在比赛之外?
有没有办法只捕获 javascript 中正则表达式的 ([A-Za-z]+)
部分?我可以只取列表中的第二项,但是有没有办法从正则表达式的匹配项中明确排除 myParameter=
?
(?:myParameter=)
是一个非捕获组,而不是后视组。 JavaScript 不支持回溯。
结果的第一个元素始终是完全匹配项。捕获组的值是数组的第二个元素,"foobar"
.
如果您使用捕获组,即 (myParameter=)
,结果将是:
["myParameter=foobar", "myParameter=", "foobar"]
同样,第一个元素是完全匹配,其他每个元素对应一个捕获组。
您没有实施 Positive Lookbehind,(?:...)
语法称为非捕获组,用于对表达式进行分组,而不是捕获它们(通常在您有一组不同的模式时交替使用)。
您可以简单地引用捕获的组作为匹配结果。
var r = 'XXXXmyParameter=foobar'.match(/myParameter=([A-Za-z]+)/)[1];
if (r)
console.log(r); //=> "foobar"
注意: JavaScript ...
不支持后视断言
myParameter 匹配,因为您使用的是非捕获组。
非捕获组与文本匹配,但不能反向引用。
非捕获组:
(?:myParameter=)
正向预测:
(?=myParameter=)
负前瞻:
(?!myParameter=)
您需要的正则表达式是:
(?!myParameter=)[A-Za-z]+$
下面的 javascript 表达式产生 ["myParameter=foobar", "foobar"]
.
'XXXXmyParameter=foobar'.match(/(?:myParameter=)([A-Za-z]+)/);
为什么 "myParameter=foobar"
是匹配项?我认为积极的回顾被排除在比赛之外?
有没有办法只捕获 javascript 中正则表达式的 ([A-Za-z]+)
部分?我可以只取列表中的第二项,但是有没有办法从正则表达式的匹配项中明确排除 myParameter=
?
(?:myParameter=)
是一个非捕获组,而不是后视组。 JavaScript 不支持回溯。
结果的第一个元素始终是完全匹配项。捕获组的值是数组的第二个元素,"foobar"
.
如果您使用捕获组,即 (myParameter=)
,结果将是:
["myParameter=foobar", "myParameter=", "foobar"]
同样,第一个元素是完全匹配,其他每个元素对应一个捕获组。
您没有实施 Positive Lookbehind,(?:...)
语法称为非捕获组,用于对表达式进行分组,而不是捕获它们(通常在您有一组不同的模式时交替使用)。
您可以简单地引用捕获的组作为匹配结果。
var r = 'XXXXmyParameter=foobar'.match(/myParameter=([A-Za-z]+)/)[1];
if (r)
console.log(r); //=> "foobar"
注意: JavaScript ...
不支持后视断言myParameter 匹配,因为您使用的是非捕获组。
非捕获组与文本匹配,但不能反向引用。
非捕获组:
(?:myParameter=)
正向预测:
(?=myParameter=)
负前瞻:
(?!myParameter=)
您需要的正则表达式是:
(?!myParameter=)[A-Za-z]+$