我在javascript中看到了這個奇怪的正則表達式。javascript正則表達式中的奇怪空格
string = "abababababababa";
string=string.replace(/ ?a ?/g,"X");
alert(string);
我跑了,我得到的輸出完全是由X 更令人不解的是空格的正則表達式替換。我刪除第一個空格,腳本不會運行。我刪除第二個空格,我得到一個「a」替換爲兩個「X」。 我不知道它是如何工作的。
我在javascript中看到了這個奇怪的正則表達式。javascript正則表達式中的奇怪空格
string = "abababababababa";
string=string.replace(/ ?a ?/g,"X");
alert(string);
我跑了,我得到的輸出完全是由X 更令人不解的是空格的正則表達式替換。我刪除第一個空格,腳本不會運行。我刪除第二個空格,我得到一個「a」替換爲兩個「X」。 我不知道它是如何工作的。
該空間實際上意味着匹配空格字符(U + 0020)。
的關鍵是,如下他們每個人,允許要匹配的模式「0或1空間」對於每個,基本上使它們可選的?
quantifier。
所以,/ ?a ?/
模式能夠匹配:
"a"
"a "
" a"
" a "
而且,試圖刪除任何空間會改變的意義的模式:
除去最主要的空間(/?a ?/g
)實際上導致SyntaxError
作爲量詞要求他們面前的東西量化。
刪除尾部空間(/ ?a?/g
)在語法上是有效的,但隨後的?
量詞將適用於a
,改變可能的匹配到:
""
"a"
" "
" a"
' '
與實際的空格字符匹配。 ?
量詞表示匹配1
或0
次。
你的正則表達式執行以下操作:
? ' ' optional space character
a match 'a'
? ' ' optional space character
這將符合以下情況:
'a'
'a '
' a'
' a '
你的正則表達式將使用g
(全球改性劑)你輸入的字符串匹配a
b a
b a
b a
b a
b a
b a
b a
。這意味着所有的比賽如果你在開始前令牌是無法量化,因此將失敗刪除空格字符(不上的第一場比賽返回)
。
如果離開了空格字符,但除去第一?
將失敗,因爲它看起來匹配空格字符,但空格字符不輸入存在。
a
。
專業提示:使用[在線正則表達式編輯器](http://regex101.com) – HamZa