RegEx匹配帮助:在每个外观上都不匹配

时间:2017-08-25 19:31:37

标签: javascript regex regex-lookarounds

我需要编写一个小的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_dDd_dad_4

但匹配:a_d(末尾有空格)

是否有其他方法可以匹配所需的部分,或者不使用'锚点#39;匹配?

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用\b

\b[a-zA-Z]+(_[a-zA-Z0-9]+)?\b

\b匹配(零宽度)点,前面的字符或后面的字符是字母,数字或下划线,但不是两者。如果第一个/最后一个字符是字母,数字或下划线,它也与字符串的开头/结尾匹配。