为什么在 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]+$

DEMO