[英]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.