環(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)視理解起來也就很簡單了呢。