这是我现在的正则表达式:
/([0-9]{2}[0-9]{2}[0-9]{2}([0-9]{2})?)/gm
它需要这样的输入:
123456 or 12345678
但如果我这样写的话:
1234567812345678
它给出了一个匹配。 这是一种防止这种情况的方法吗?
语言是javascript
答案 0 :(得分:2)
由于你的全球旗帜,为了解决这个问题你可以使用开始和结束锚点:
^([0-9]{2}[0-9]{2}[0-9]{2}([0-9]{2})?)$
请参阅演示https://regex101.com/r/nZ9iB0/1
另外,作为一种更优雅的方式,您可以简化正则表达式并使用以下内容:
^([0-9]{6}([0-9]{2})?)$
答案 1 :(得分:2)
添加^
和$
锚点对我有用:^([0-9]{2}[0-9]{2}[0-9]{2}([0-9]{2})?)$
。
m modifier: multi-line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)
可用示例here。
答案 2 :(得分:1)
如果您没有使用m
或^
$
标记
关于你的问题,是的,确实如此。您正在寻找边界,如果您希望数字在任何地方但不与其他字符一起使用 - \b([0-9]{2}[0-9]{2}[0-9]{2}(?:[0-9]{2})?)\b
,如https://regex101.com/r/hO1pH4/1
如果你想让它匹配,只有它是唯一的"字"在行中,您可以使用锚点^
和$
,就像其他答案所示(在这种情况下,您需要m
标志)
顺便说一下,没有理由重复[0-9]{2}
三次,不妨使用\b([0-9]{6}(?:[0-9]{2})?)\b