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

Javascript, regular expression and {n,m}

本文关键字:正则表达式 Javascript      更新时间:2023-09-26

我刚刚注意到一个非常奇怪的行为。为什么一个简单的空格会中断所有的测试?

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

感谢u

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

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

当您在测试值的开始或结束处添加空格时,您的regexp不起作用,因为您使用了regexp分隔符^和$

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

如果将两个分隔符组合在一起,regexp将对包括空格在内的所有字符作出反应。

所以使用下面的regexp来捕获任何符合模式的字符串:

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