我有这个正则表达式,感谢另一个wonderful StackOverflow user
/(?:-\d+)*/g
我想要它匹配像
这样的东西133-134-454-58819860
12-13-876-1234346
每个块(-s之间的数字)可以是任意长度,但它只是数字而且只有4个块。
但目前它匹配的东西如-2008
我在正则表达方面非常糟糕,我正在努力,请帮忙。如果有帮助,我会使用JavaScript。
答案 0 :(得分:6)
/(?:-\d+)*/g
分解为:
/ about to begin a regex
( the following is a group
?: but don't bother storing what this group finds as its own result
- it must have a dash
\d followed by digit(s)...
+ at least one digit, perhaps more
) Im done with the group
* But get me as many groups like that as you could
/ done with the regex
所以它会找到像这样的所有组-0000 但不喜欢这个-000-000
在撰写本文时,其他更快的用户发布了他们自己的正则表达式。但我仍然发布,所以你遵循逻辑。
答案 1 :(得分:2)
试试这个
/(?:\ d + - ){3} \ d + /
答案 2 :(得分:1)
如果您想匹配完全四个连字符分隔的数字字符串,您可能需要这样:
/^\d+-\d+-\d+-\d+$/
^和$是将匹配约束到字符串的开头和结尾的锚点。如果您正在查找带有其他文本的字符串(例如“blah blah 12-12-12-12 blah blah”),您将要删除它们。
答案 3 :(得分:0)
至于检查匹配数量,以下内容应该有效:
alert(
"133-134-454-58819860".match(/^(\d+-){3}\d+$/g).join("\n")
);
JavaScript字符串的匹配函数将正则表达式对象作为参数。它返回一个匹配数组,按照在字符串中找到它们的顺序。