一、前言
正則表達式是匹配模式,要么是匹配字符,要么匹配位置。
其實在開發中很少用到匹配位置,本篇文章主要包含:
二、什么是位置
位置:相鄰字符之間的位置。
三、如何匹配位置
在ES5中,共有6個錨:^, $, \b, \B, (?=p), (?!p)
可視化形式:
RegExp:/^$\b\B(?=a)(?!b)/g
3.1 ^和$
^(脫字符)匹配開頭,在多行匹配中匹配行開頭。
$(美元符)匹配結尾,在多行匹配中匹配行結尾。
比如:我們把字符串的開頭和結尾用#替換(位置可以替換成字符的):
1
2
3
|
var result = "hello" .replace(/^|$/g, '#' ); console.log(result); // "#hello#" |
多行匹配模式(有修飾符m)時,二者是行的概念,我們需要注意:
1
2
3
|
var result = "I\nlove\njavascript" .replace(/^|$/gm, '#' ); console.log(result); // #I#// #love#// #javascript# |
3.2 \b和\B
\b是單詞邊界,具體就是\w和\W之間的位置,也包括\w與^之間的位置,和\w和$之間的位置。
比如考察文件名"[JS] Lesson_01.mp4"中的\b,如下:
1
2
3
|
var result = "[JS] Lesson_01.mp4" .replace(/\b/g, '#' ); console.log(result); // "[#JS#] #Lesson_01#.#mp4#" |
首先,我們知道\w是字符組[0-9a-zA-Z]的簡寫,即使字母數字或者下劃線中任何一個字符。而\W是字符組[^0-9a-zA-Z]的簡寫,即\W是\w以外的任何一個字符。
我們再來看#是怎么來的:
第 1 個,兩邊字符是 "[" 與 "J",是 \W 與 \w 之間的位置。
第 2 個,兩邊字符是 "S" 與 "]",也就是 \w 與 \W 之間的位置。
第 3 個,兩邊字符是空格與 "L",也就是 \W 與 \w 之間的位置。
第 4 個,兩邊字符是 "1" 與 ".",也就是 \w 與 \W 之間的位置。
第 5 個,兩邊字符是 "." 與 "m",也就是 \W 與 \w之間的位置。
第 6 個,位于結尾,前面的字符 "4" 是 \w,即 \w 與 $ 之間的位置。
知道了\b概念后,那\B就好理解了,\b是單詞邊界,\B是非單詞邊界
1
2
3
|
var result = "[JS] Lesson_01.mp4" .replace(/\B/g, '#' ); console.log(result); // "#[J#S]# L#e#s#s#o#n#_#0#1.m
延伸 · 閱讀
精彩推薦
|