我正在尝试在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"));
答案 0 :(得分:6)
匹配2345678-13-1
。你需要anchor到字符串的开头和结尾:
/^\d{1,7}-\d{2}-\d$/
但请注意,(如Rocket Hazmat指出的那样)如果使用正则表达式文字(没有字符串引号的话),则不需要使用RegExp
构造函数。
答案 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
,所以你需要一种在第一组数字之前匹配字符的方法