为什么积极的lookbehind在javascript中作为正则表达式匹配的一部分被捕获?
下面的javascript表达式生成为什么积极的lookbehind在javascript中作为正则表达式匹配的一部分被捕获?,javascript,regex,Javascript,Regex,下面的javascript表达式生成[“myParameter=foobar”,“foobar”] 为什么“myParameter=foobar”甚至是匹配项?我认为积极的落后是排除在比赛之外的 有没有办法只捕获javascript中正则表达式的([a-Za-z]+)部分?我可以只取列表中的第二项,但是有没有办法从正则表达式中的匹配项中明确排除myParameter=。(?:myParameter=)是一个非捕获组,而不是查找组。JavaScript不支持lookbehinds 结果的第一个元素
[“myParameter=foobar”,“foobar”]
为什么“myParameter=foobar”
甚至是匹配项?我认为积极的落后是排除在比赛之外的
有没有办法只捕获javascript中正则表达式的([a-Za-z]+)
部分?我可以只取列表中的第二项,但是有没有办法从正则表达式中的匹配项中明确排除myParameter=
。(?:myParameter=)
是一个非捕获组,而不是查找组。JavaScript不支持lookbehinds
结果的第一个元素始终是完全匹配。捕获组的值是数组的第二个元素,“foobar”
如果使用捕获组,即(myParameter=)
,则结果将是:
["myParameter=foobar", "myParameter=", "foobar"]
同样,第一个元素是完全匹配的,每个其他元素对应一个捕获组。(?:myParameter=)
是一个非捕获组,而不是一个查找组。JavaScript不支持lookbehinds
结果的第一个元素始终是完全匹配。捕获组的值是数组的第二个元素,“foobar”
如果使用捕获组,即(myParameter=)
,则结果将是:
["myParameter=foobar", "myParameter=", "foobar"]
同样,第一个元素是完全匹配的,每个其他元素对应一个捕获组。您没有实现正向查找,
(?:…)
语法被称为非捕获组,用于对表达式进行分组,而不是捕获表达式(通常在有一组不同模式时交替使用)
您可以简单地引用捕获的组以获得匹配结果
var r = 'XXXXmyParameter=foobar'.match(/myParameter=([A-Za-z]+)/)[1];
if (r)
console.log(r); //=> "foobar"
注意:JavaScript中不支持Lookbehind断言…您没有实现正向Lookbehind,
(?:…)
语法称为非捕获组,用于对表达式进行分组,而不是捕获表达式(通常在具有一组不同模式时交替使用)
您可以简单地引用捕获的组以获得匹配结果
var r = 'XXXXmyParameter=foobar'.match(/myParameter=([A-Za-z]+)/)[1];
if (r)
console.log(r); //=> "foobar"
注意:JavaScript中不支持查找断言…myParameter是匹配的,因为您使用的是非捕获组 非捕获组与文本匹配,但不能反向引用 非捕获组:
(?:myParameter=)
积极前瞻:
(?=myParameter=)
(?!myParameter=)
消极前瞻:
(?=myParameter=)
(?!myParameter=)
您需要的正则表达式是:
(?!myParameter=)[A-Za-z]+$
myParameter是匹配的,因为您使用的是非捕获组 非捕获组与文本匹配,但不能反向引用 非捕获组:
(?:myParameter=)
积极前瞻:
(?=myParameter=)
(?!myParameter=)
消极前瞻:
(?=myParameter=)
(?!myParameter=)
您需要的正则表达式是:
(?!myParameter=)[A-Za-z]+$
这不是查找,而是一个非捕获组。JS中没有查找。如果它确实支持它,那么它将是`/(?这不是查找,它是一个非捕获组。在JS中没有查找。如果它确实支持它,那么它将是`/(?
(?!myParameter=)[a-Za-z]+
不会执行您认为它会执行的操作。引擎将前进一个位置以使断言通过。因此它将匹配“myParameter
”(?!myParameter=)[A-Za-z]+
不会执行您认为它会执行的操作。引擎将前进一个位置以使断言通过。因此它将匹配“myParameter
”