【发布时间】:2017-06-26 19:44:37
【问题描述】:
我正在尝试获取一个数字 (5),然后是可能的 - 或 (空格),然后是 3 位数字序列,最后是一个数字。如果第一组根本不匹配,则只返回其他数字序列。
^(5\-? ?)?(\d{3})(\d)$
这在我看来是正确的,不会引发任何错误,但它会返回 5:
"5489" -> ()("548")("9")
我实际上不希望此表达式返回此模式的匹配项。
所以快速搜索让我找到了所有格表达和很多关于你前任的文章。从我正在阅读的内容来看,这看起来应该可以工作:
^(5\-? ?)?+(\d{3})(\d)$
但 Javascript 确实 不 喜欢将其作为正则表达式。
有没有办法在Javascript中做一个贪婪的所有格捕获组,或者在这种情况下模拟它?
【问题讨论】:
-
在 JS
?+中没有所有格 quant@ -
如果您查看 ECMAScript 5 文档,您会发现不支持所有格量词。
-
如果只是不是5那么这个
^(5\-? ?)?((?!5)\d{3})(\d)$ -
试试
^(?!5\d{3}$)(5\-? ?)?(\d{3})(\d)$。如果字符串以5开头,然后是 3 位数字,则会立即匹配失败。 -
@RandyHall - 没有理由强迫任何事情。最后你有一个 固定 位数要匹配,而且你正在使用锚点
^$。结论是,如果您只有 4 位数字,它们将在最后匹配,因为它是正则表达式设计的一个宗旨。如果您不想匹配以5开头的 4 位数字,那么这是一个额外的断言,但与强制捕获第一组无关。我只是将其作为评论声明,因为这是一个 X/Y 问题,我不喜欢无缘无故地发帖。
标签: javascript regex regex-greedy