我正在尝试抓取一个数字(5
),然后是一个可能的-
或(空格)继续进行3位数的序列,最后是一个数字。如果第一组根本不匹配,则只返回其他数字序列。
^(5\-? ?)?(\d{3})(\d)$
这看起来对我来说并不会引发任何错误,但它会给5
回复:
"5489" -> ()("548")("9")
我实际上不希望此表达式返回此模式的匹配项。
所以快速搜索带给我占有欲的表达方式和很多关于你的前任的文章。从我正在阅读的内容来看,它看起来应该有效:
^(5\-? ?)?+(\d{3})(\d)$
但Javascript像正则表达式一样不。
有没有办法在Javascript中做一个贪婪的占有捕获组,或者在这种情况下模拟它?
答案 0 :(得分:3)
答案 1 :(得分:1)
如果你看一下ECMAScript 5文档,你会发现没有对占有量词的支持。
您可以使用
^(?!5\d{3}$)(5-? ?)?(\d{3})(\d)$
请参阅regex demo。如果字符串以(?!5\d{3}$)
开头,然后有3位数,5
否定前瞻将立即失败。
<强>详情:
^
- 字符串开头(?!5\d{3}$)
- 不能有5
然后是3位数字,而且字符串的结尾位于当前位置的右侧(5-? ?)?
- 5
的可选序列,然后是可选的-
,然后是可选空格(\d{3})
- 3位数(\d)
- 一位数$
- 字符串结束。