为什么在 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 不支持 lookbehinds。
结果的第一个元素始终是完全匹配。捕获组的值是数组的第二个元素,"foobar"
。
如果您使用了捕获组,即 (myParameter=)
,结果将是:
["myParameter=foobar", "myParameter=", "foobar"]
所以同样,第一个元素是完全匹配的,每个其他元素对应于一个捕获组。
您没有实现 Positive Lookback,(?:...)
语法称为非捕获组,用于对表达式进行分组,而不是捕获它们(通常在具有一组不同模式时交替使用)。
您可以简单地引用捕获的组以获取匹配结果。
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正则表达式中用正斜杠分隔的字符串的一部分
- 如何仅替换以下正则表达式(JavaScript)的一部分
- 使用正则表达式替换字符串的一部分
- 如何在正则表达式中否定类的一部分
- 为什么在 javascript 中将正面回溯捕获为正则表达式匹配的一部分
- 拆分忽略正则表达式的一部分
- 如何使用正则表达式或 jQuery 检索 URL 的最后一部分
- 使用正则表达式拉出字符串的一部分
- 为什么我的正则表达式捕获组只在匹配多个部分时捕获字符串的最后一部分
- 如何仅对字符串的一部分应用正则表达式
- 在 Javascript 中使用正则表达式替换 html 字符串的一部分
- 如果字符串是编号列表的一部分,正则表达式将检测到什么
- 使用正则表达式或javascript提取ID的最后一部分
- 用Javascript正则表达式将字符串的一部分与列表中的项相匹配
- 用什么正则表达式来确定<或比;是HTML标记的一部分
- 正则表达式以避免替换html标记的一部分
- 正则表达式查找模式并只替换其中的一部分
- 如何返回匹配正则表达式的javascript字符串的一部分
- 正则表达式匹配字符串的最后一部分
- 使 JavaScript 正则表达式的一部分可选