正则表达式匹配帮助:不会在每次出现时都匹配

RegEx matching help: won't match on each appearence

我需要编写一个小的 RegEx 匹配器,它将以

的形式匹配任何出现的字符串

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

如果我使用上面的正则表达式,它确实匹配所需的部分,但也会匹配到 4_abcabc 部分,这不是预期的。我试图用以下方法排除它:

(?:[^a-zA-Z0-9_]|^)([a-zA-Z]+(_[a-zA-Z0-9]+)?)(?:[^a-zA-Z0-9_]|$)

问题是开头和结尾的 'not' 匹配并没有像我希望的那样真正发挥作用。如果我在示例中使用它们

a_d Dd_da 4_d d_4

他们会阻止匹配第二个 Dd_da 因为 space 在第一个中使用 match.Sadly 我不能使用 lookarounds 因为我正在使用 JS。

所以输入: a_d Dd_da 4_d d_4

应匹配:a_dDd_dad_4

但匹配:a_d(最后有一个space)

是否有另一种方法来匹配所需的部分,或者不使用 'anchor' 匹配项?

非常感谢您的帮助。

您可以使用 \b:

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

\b 匹配(零宽度)点,其中前面的字符或后面的字符是字母、数字或下划线,但不能同时是两者。如果 first/last 字符是字母、数字或下划线,它也与字符串的 start/end 匹配。