[英]Why does this regex match in javascript?
在http://jsfiddle.net/42zcL/上提琴
我有以下代碼,應提醒“ No Match”。 如果我將正則表達式放入regexpal.com並運行它,則它與預期的不匹配。 使用此代碼,它確實匹配。 我知道還有另一種方法可以正常工作-/ /^((.*)Waiting(.*))?$/
((.*) /^((.*)Waiting(.*))?$/
,但是我很好奇為什么這失敗了。 它應該匹配一個帶有文本“ Waiting”的字符串,或者完全不匹配。
var teststring="Anything";
if (teststring.match(/^((.*)Waiting(.*))|()$/)) alert('match');
else alert('No Match');
編輯:更清晰的例子:
var teststring="b";
if (teststring.match(/^(a)|()$/)) alert('match');
else alert('No Match');
當我期望“沒有匹配”時,產生一個匹配
根據regexpal.com的預期行為:
teststring: a = match
teststring: b = no match
JavaScript中的實際行為:
teststring: a = match
teststring: b = match
因為結尾處有|()$
,就像說“匹配之前的內容|
但如果找不到它,則只要有行尾就匹配任何東西。”
希望這可以更好地解釋它:
()
並不意味着“ 不匹配任何內容 ”。 如果未指定任何字符,它將仍然與字符串中每個位置(即字母位置)的()
匹配。 想象這樣的:這個詞“任何”變成數組- [A,N,Y,T,H,I,N,G] -如果n = length of that array
,在占位符[n]
是非空 ,導致“匹配”,因為在模式中未表達特定限制。 |()$
將對測試的任何單詞返回肯定結果 ,因此您始終會在警報中看到“匹配”。 我非常難以傳達自己的想法,因此也許以前的堆棧答案會填補我的答案所留下的空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.