簡體   English   中英

為什么此正則表達式在javascript中匹配?

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

因為結尾處有|()$ ,就像說“匹配之前的內容|但如果找不到它,則只要有行尾就匹配任何東西。”

- 完整的RegEx參考

- 試試看

希望這可以更好地解釋它:

  1. 在RegEx 使用() 並不意味着“ 不匹配任何內容 ”。 如果未指定任何字符,它將仍然與字符串中每個位置(即字母位置)的()匹配。 想象這樣的:這個詞“任何”變成數組- [A,N,Y,T,H,I,N,G] -如果n = length of that array ,在占位符[n] 是非空 ,導致“匹配”,因為在模式中未表達特定限制。
  2. 由於#1本質上意味着|()$將對測試的任何單詞返回肯定結果 ,因此您始終會在警報中看到“匹配”。

我非常難以傳達自己的想法,因此也許以前的堆棧答案會填補我的答案所留下的空白。

暫無
暫無

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

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