簡體   English   中英

Javascript,正則表達式和{n,m}

[英]Javascript, regular expression and {n,m}

我剛剛注意到一種非常奇怪的行為。 為什么一個簡單的空間會破壞所有測試?

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, }將匹配文字{2, }

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

當您在測試值的開頭或結尾添加空格時,您的正則表達式不起作用,因為您使用regexp delemiters ^和$

  • ^表示模式捕獲到字符串的開頭
  • $表示模式捕獲到字符串的末尾

如果將兩個分隔符組合在一起,則正則表達式將對包括空格在內的所有字符進行響應。

因此,使用以下正則表達式來捕獲遵循該模式的任何字符串:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM