正則表達式之環(huán)視與位置

環(huán)視與位置是正則表達式中的兩個比較復(fù)雜難懂的概念。但是掌握后,對于正則的使用也會更得心應(yīng)手,工作中的正則需求也就都能搞定了。

位置

正則表達式中只有匹配兩種東西,一種是內(nèi)容,另一種就是位置。

匹配內(nèi)容:

/\w+/.exec('hello') // "hello"

\w匹配到的是單詞字符,所以\w匹配的是內(nèi)容。

在知道什么是內(nèi)容后,那么什么是位置呢?

我們現(xiàn)在低頭看看你的鍵盤的第一排字母按鍵q、w、e、r,可以看到q與w并不是完全挨在一起的,中間會有一條不算太寬大的縫。這條縫就可以理解成位置。一個 qwer的字符串,其實就是從 tab鍵到t鍵中間的所有空間。

縫隙 + q + 縫隙 + w + 縫隙 + e + 縫隙 + r + 縫隙

一些其他匹配位置的常用匹配符

  • ^ 匹配開始的位置
  • $ 匹配結(jié)束的位置
  • \b 匹配單詞邊界
  • \B 匹配非單詞邊界
  • (?=p)(?!p)、(?<=p)、?<!p 環(huán)視

環(huán)視

環(huán)視包括以下四種(后兩種ES6支持)

  • 正前瞻(positive lookahead)
  • 負(fù)前瞻(negative lookahead)
  • 正后顧(positive lookbehind)
  • 負(fù)后顧(negative lookbehind)

一些官方的文檔或博客上面會使用一些晦澀難懂(正向先行斷言,負(fù)向先行斷言等)的詞來翻譯以上四種環(huán)視。

所有的環(huán)視匹配的都是位置。

正前瞻

正前瞻語法為 (?=p),匹配p前面的位置。

const str = 'qwer'
str.replace(/(?=w)/g, 'a') // "qawer"

把 w 前面的位置替換成 a。

負(fù)前瞻

負(fù)前瞻語法為(?!p),匹配結(jié)果是正前瞻的取反,匹配除了p,所有其他字符前面的位置。

const str = 'qwer'
str.replace(/(?!w)/g, 'a') // "aqwaqar"

把除了w的字符前面的位置都替換成a

正后顧

前瞻是往前看,后顧自然就是往后看了。

正后顧語法(?<=p)。匹配p后面的位置。

const str = 'qwer'
str.replace(/(?<=w)/g, 'a') // "qwaer"

w后面的位置替換成a。

負(fù)后顧

負(fù)后顧語法(?<!p)。匹配除了p` 所有其它字符后面的位置。

const str = 'qwer'
str.replace(/(?<!w)/g, 'a') // "qaweara"

除了w的其他字符后面的位置替換成a


以上就是位置與環(huán)視的核心內(nèi)容了,其實把位置理解了,環(huán)視理解起來也就很簡單了呢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容