我需要编写一个小的RegEx匹配器,它将以
的形式匹配任何出现的字符串 [a-zA-Z]+(_[a-zA-Z0-9]+)?
如果我使用上面的正则表达式,它确实与所需的部分匹配,但也会匹配abc
部分的4_abc
部分。我试图用以下方法排除它:
(?:[^a-zA-Z0-9_]|^)([a-zA-Z]+(_[a-zA-Z0-9]+)?)(?:[^a-zA-Z0-9_]|$)
问题在于'不是'在开始和结束时的比赛并没有像我希望的那样真正发挥作用。如果我在示例中使用它们
a_d Dd_da 4_d d_4
他们会阻止匹配第二个Dd_da,因为在第一个匹配中使用了空格。我不能使用外观,因为我使用的是JS。
所以输入:
a_d Dd_da 4_d d_4
应匹配:a_d
,Dd_da
和d_4
但匹配:a_d
(末尾有空格)
是否有其他方法可以匹配所需的部分,或者不使用'锚点#39;匹配?
我非常感谢你的帮助。
答案 0 :(得分:2)
您可以使用\b
:
\b
匹配(零宽度)点,前面的字符或后面的字符是字母,数字或下划线,但不是两者。如果第一个/最后一个字符是字母,数字或下划线,它也与字符串的开头/结尾匹配。