【发布时间】:2017-08-25 19:31:37
【问题描述】:
我需要编写一个小的正则表达式匹配器,它将匹配任何出现的字符串,形式为
[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_]|$)
问题是开头和结尾的“不”匹配并没有像我希望的那样真正起作用。如果我在示例中使用它们
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(末尾有空格)
是否有其他方法可以匹配所需的部分,或者不使用“锚”匹配项?
非常感谢您的帮助。
【问题讨论】:
-
\b怎么样?\b[a-zA-Z]+(_[a-zA-Z0-9]+)?\b -
@trincot 成功了!!我之前忽略了这一点,因为我虽然
∧∨可能被视为“单词的一部分”,但这解决了问题!您能否将其重新发布为答案?
标签: javascript regex regex-lookarounds