【问题标题】:Javascript RegEx match 1-1-1 and 1-1-1-1-1 but not -1-1-1-1 or 1-1-1-1-Javascript RegEx 匹配 1-1-1 和 1-1-1-1-1 但不匹配 -1-1-1-1 或 1-1-1-1-
【发布时间】:2018-09-08 19:02:37
【问题描述】:

使用谷歌和堆栈溢出时我没有发现任何东西。
我需要匹配 1-1-1 但不是 -1-1-1 或 1-1-1- 与 javascript RegEx。
所以它必须以数字开头,以数字结尾,并且必须用“-”分隔。
我不知道该怎么做。
甚至可能吗?

【问题讨论】:

  • 您要验证的是整个字符串,还是要从较大的字符串中提取数据?在第一种情况下,使用锚点 (^1-1-1$) 就足够了。
  • 是的 :) 你能分享一下你到目前为止的尝试吗?
  • 它是文本的一部分,例如:“foo 1-1-1 bar”
  • 获取自己的正则表达式教程和regex101.com,然后自己先尝试一下。然后告诉我们你的想法。
  • ^\d+(?:-\d+)+$?

标签: javascript regex match


【解决方案1】:

不幸的是,JavaScript 正则表达式没有后视功能(请参阅javascript regex - look behind alternative?),因此要排除前面的 -,正则表达式也必须匹配前面的字符(只要它不是 @ 987654325@)。

由于可能没有前面的字符(输入以 1 开头),因此您还必须匹配输入的开头 (^)。

所以,这个正则表达式会做到这一点:(?:[^-]|^)(1(?:-1)+)(?!-)

regex101.com

它应该匹配独立的1,还是只匹配1-1(以及更长的时间),由您决定。上面的正则表达式将不匹配独立的1。将 + 更改为 * 以进行更改。

我还添加了您想要匹配的实际文本的捕获,即没有前导字符。如果不需要,您可以删除 1(?:-1)+ 周围多余的 ()

【讨论】:

猜你喜欢
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多