我有正则表达式:
/(?:(?:\b|_)([a-z][a-z])(?:\b|_))/gi
和一个字符串:
of Us_AR.xyz
正则表达式与of
和Us
匹配,但我还需要AR
。
似乎_
已被“使用”以匹配Us
,因此无法与AR
匹配?
我能解决这个问题吗?
答案 0 :(得分:0)
如果您只想在字符串开头提取下划线两侧的单词,那么为什么不使用以下模式:
([A-Z]+)\s+([A-Z]+)_([A-Z]+)
您想要的三个匹配项将在第一个到第三个捕获组中可用。
var input = "of Us_AR.xyz";
var pattern = /([A-Z]+)\s+([A-Z]+)_([A-Z]+)/gi;
var match = pattern.exec(input);
console.log(match[1]);
console.log(match[2]);
console.log(match[3]);
答案 1 :(得分:0)
你可以使用负向前看:
/(?:[^a-z]|^)([a-z]{2})(?![a-z])/gi
在JS中无法查看背后的内容,因此您不应该处理第一个非捕获组中匹配的内容,而只应处理仅在捕获组中捕获的内容。
[^a-z]|^
:匹配非字母或字符串的开头(^
)[a-z]{2}
:匹配2个字母(?![a-z])
:要求下面没有字母,但不会捕获它。第一个表达式放在(?: )
中,因此它不能用作捕获组。第二个表达式放在( )
中,以便您可以引用它。