【问题标题】:RegEx matching help: won't match on each appearence正则表达式匹配帮助:不会在每个外观上匹配
【发布时间】:2017-08-25 19:31:37
【问题描述】:

我需要编写一个小的正则表达式匹配器,它将匹配任何出现的字符串,形式为

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

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

(?:[^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(末尾有空格)

是否有其他方法可以匹配所需的部分,或者不使用“锚”匹配项?

非常感谢您的帮助。

【问题讨论】:

  • @trincot 成功了!!我之前忽略了这一点,因为我虽然 可能被视为“单词的一部分”,但这解决了问题!您能否将其重新发布为答案?

标签: javascript regex regex-lookarounds


【解决方案1】:

您可以使用\b:

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

\b 匹配(零宽度)点,其中前一个字符或后一个字符是字母、数字或下划线,但不能同时是两者。如果第一个/最后一个字符是字母、数字或下划线,它也与字符串的开始/结束匹配。

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2011-07-14
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多