Javascript,正则表达式和{n,m}

时间:2011-10-24 13:29:08

标签: javascript regex

我刚注意到一种非常奇怪的行为。为什么一个简单的空间会破坏所有测试?

rePattern = /^([a-z]+[-_]?){2,}[a-z]$/; 
var test = new Array("jhgfg_hfh-g", "jhg-fg_hfhg", "jhg_fg_hfhg", "jhg_fg_hfhg", "jhg_fghfhg");
for (var i = 0; i < test.length ; i++) {
   x = test[i];
   alert(i + ' : ' + x + ' : ' + rePattern.test( x ));
}

如果我将上述内容更改为

// notice {2,} => {2, } with an extra space before }
rePattern = /^([a-z]+[-_]?){2, }[a-z]$/;

然后一切都变成false ......

谢谢你

2 个答案:

答案 0 :(得分:4)

好的,只是在这里有一个接受的答案:这是因为额外的空间。正则表达式的语法是严格的,你不能添加随机空格并期望它会被忽略。 {2, }将与文字{2, }匹配:

/^x{2, }$/.test('x{2, }') === true

答案 1 :(得分:0)

当您在测试值的开头或结尾添加空格时,您的正则表达式不起作用,因为您使用的是regexp delemiters ^和$

  • ^表示模式捕获到字符串的开头
  • $表示模式捕获到字符串的末尾

如果组合两个分隔符,正则表达式将对包括空格在内的所有字符做出反应。

因此,请使用以下regexp来捕获遵循该模式的任何字符串:

/([a-z]+[-_]?){2,}[a-z]/