正则表达式中只能采用新的线路输入吗?

时间:2015-07-23 08:19:49

标签: javascript regex

这是我现在的正则表达式:

/([0-9]{2}[0-9]{2}[0-9]{2}([0-9]{2})?)/gm

它需要这样的输入:

123456 or 12345678

但如果我这样写的话:

1234567812345678 

它给出了一个匹配。 这是一种防止这种情况的方法吗?

语言是javascript

3 个答案:

答案 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