正则表达式匹配帮助:不会在每次出现时都匹配
RegEx matching help: won't match on each appearence
我需要编写一个小的 RegEx 匹配器,它将以
的形式匹配任何出现的字符串
[a-zA-Z]+(_[a-zA-Z0-9]+)?
如果我使用上面的正则表达式,它确实匹配所需的部分,但也会匹配到 4_abc
的 abc
部分,这不是预期的。我试图用以下方法排除它:
(?:[^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_d
、Dd_da
和 d_4
但匹配:a_d
(最后有一个space)
是否有另一种方法来匹配所需的部分,或者不使用 'anchor' 匹配项?
非常感谢您的帮助。
您可以使用 \b
:
\b
匹配(零宽度)点,其中前面的字符或后面的字符是字母、数字或下划线,但不能同时是两者。如果 first/last 字符是字母、数字或下划线,它也与字符串的 start/end 匹配。
我需要编写一个小的 RegEx 匹配器,它将以
的形式匹配任何出现的字符串[a-zA-Z]+(_[a-zA-Z0-9]+)?
如果我使用上面的正则表达式,它确实匹配所需的部分,但也会匹配到 4_abc
的 abc
部分,这不是预期的。我试图用以下方法排除它:
(?:[^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_d
、Dd_da
和 d_4
但匹配:a_d
(最后有一个space)
是否有另一种方法来匹配所需的部分,或者不使用 'anchor' 匹配项?
非常感谢您的帮助。
您可以使用 \b
:
\b
匹配(零宽度)点,其中前面的字符或后面的字符是字母、数字或下划线,但不能同时是两者。如果 first/last 字符是字母、数字或下划线,它也与字符串的 start/end 匹配。