正則表達(dá)式環(huán)視、斷言、預(yù)查:開頭結(jié)尾匹配的技巧
本文深入探討正則表達(dá)式中環(huán)視(lookaround)、斷言和預(yù)查的用法,并解釋在匹配字符串開頭和結(jié)尾時(shí),正向否定預(yù)查和反向否定預(yù)查為何使用方法不同,以及各自的含義。
我們從一個(gè)常見問題出發(fā):使用正則表達(dá)式排除特定字符串時(shí),為什么正向否定預(yù)查 ^(?!baidu).*$ 用于判斷不以 “baidu” 開頭的字符串,而反向否定預(yù)查卻不同?
關(guān)鍵在于理解向前預(yù)查和向后預(yù)查。^(?!baidu).*$ 并非簡單地“不以baidu開頭”,而是匹配“其后不跟著 baidu 的開頭”的空字符串,然后再加上任意字符串和結(jié)尾。它關(guān)注的是匹配位置之后的內(nèi)容。
而判斷不以 “baidu” 開頭,可以直接使用 ^(?!baidu),無需 .*$。 同樣,判斷不以 “com” 結(jié)尾,應(yīng)該使用 (?
以下代碼示例更清晰地解釋向前預(yù)查和向后預(yù)查的含義和區(qū)別:
/^(?!baidu)/.test('baidu.com'); // false /^(?!baidu)/.test('www.baidu.com'); // true /^(?<p>通過這些例子可以看出,正向預(yù)查 `(?=...)` 匹配的是當(dāng)前位置之后滿足條件的字符串,而反向預(yù)查 `(?<=...)` 匹配的是當(dāng)前位置之前滿足條件的字符串。</p>
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END