Javascript Regex对象无法识别{n,m}

时间:2012-11-15 15:46:22

标签: javascript regex

我正在尝试在JS中编写一个正则表达式来识别最多七次的任何数字,然后是“ - ”后跟2位数后跟“ - ”后跟一位数字。这是我的简单正则表达式:

/\d{1,7}-\d{2}-\d/g

这应匹配以下字符串:

  • 123-12-7
  • 1-12-7
  • 1234567-12-7

但不是12345678-12-1

然而,以上情况正在回归。当第一组中有任意数量的数字时,正则表达式返回true。

JavaScript Regex对象是否不支持{n,m}?

以下是我所谈论的一个例子。

var pattern = new RegExp(/\d{1,7}-\d{2}-\d/);
alert(pattern.test("12345678-13-1"));

http://jsfiddle.net/XTRAc/1/直播示例

5 个答案:

答案 0 :(得分:6)

匹配2345678-13-1。你需要anchor到字符串的开头和结尾:

/^\d{1,7}-\d{2}-\d$/

但请注意,(如Rocket Hazmat指出的那样)如果使用正则表达式文字(没有字符串引号的话),则不需要使用RegExp构造函数。

JSFiddle

答案 1 :(得分:4)

它确实支持{min,max}-syntax,但.match.test()尝试查找匹配的子字符串。您必须包含start and end anchors。另请注意,您应该使用RegExp构造函数从字符串正则表达式文字构建正则表达式,但不能同时使用两者(请参阅MDN: creating regexes)。

/^\d{1,7}-\d{2}-\d$/
new RegExp("^\\d{1,7}-\\d{2}-\\d$") // the worse choice

答案 2 :(得分:1)

您正在错误地构建正则表达式。试试这个(注意锚点,确保字符串只包含你的模式):

var pattern= /^\d{1,7}-\d{2}-\d$/;

否则现有字符串的子集将与正则表达式匹配。

答案 3 :(得分:1)

如果您需要验证整个输入字符串,请使用正则表达式

/^\d{1,7}-\d{2}-\d$/

如果您需要验证整行输入字符串,请使用正则表达式

/^\d{1,7}-\d{2}-\d$/mg

如果您需要在输入字符串中查找匹配项,请使用正则表达式

/(?:\D|^)(\d{1,7}-\d{2}-\d)(?!\d)/g

...并使用$1作为结果。

答案 4 :(得分:0)

它确实支持{n,m}部分,这里的问题是你的例子匹配2345678,所以你需要一种在第一组数字之前匹配字符的方法