摘要:將用作括號表達式中的第一個字符,則會對字符集求反匹配結(jié)尾的位置與一個字邊界匹配,比如與中的匹配,但與中的不匹配非邊界字匹配標記字符組,標記括號表達式的開始和結(jié)尾。
字符
| 表示在兩個或多個項之間進行選擇,類似或
/ 開始和結(jié)尾
轉(zhuǎn)義
- 連字符,當且僅當在字符組 [] 的內(nèi)部表示一個范圍,比如[A-Z]表示范圍從A到Z;如果需要在字符組里面表示普通字符 - ,放在字符組的開頭或結(jié)尾即可
. 匹配出換行符
之外的任何單個字符
d 等價[0-9],匹配0到9數(shù)字
D 等價[^0-9],與 d 相反
w 匹配以下字符:A-Z、a-z、0-9個下劃線,等價于 [A-Za-Z0-9]
W [^A-Za-z0-9]
限定符(量詞字符)
顯示限定符位于大括號{}中,并包括指示出現(xiàn)次數(shù)上下限的數(shù)值; *+? 這三個字符屬于單字符限定符:
{n} 剛好匹配 n 請輸入代碼次
{n,} 至少匹配 n 次
{n,m} 匹配至少 n 次,至多 m 次,即匹配 n 到 m 次
* 等價 {0,}
+ 等價 {1,}
? 等價 {0,1}
注意:
顯示限定符中,逗號和數(shù)字之間不能有空格,否則返回null
貪婪量詞 * 和 + :JavaScript默認是貪婪匹配,即匹配重復字符是盡可能多的匹配
惰性(最少重復匹配)量詞 ? :當進行貪婪匹配,只需要在要匹配的字符后面加上一個 ? 即可
var reg = /a+/; var reg2 = /a+?/; var str = "aaab"; str.match(reg); // ["aaa"] str.match(reg2); // ["a"]
定位點(錨字符、邊界)
^ 匹配開始的位置。將 ^ 用作括號 [] 表達式中的第一個字符,則會對字符集求反
$ 匹配結(jié)尾的位置
與一個字邊界匹配,比如 er 與 "never" 中的 "er" 匹配,但與 "verb" 中的 "er" 不匹配
B 非邊界字匹配
標記
[] 字符組,標記括號表達式的開始和結(jié)尾。[...] 匹配括號內(nèi)任意字符。很多字符在 [] 都會失去原來的意義:[^...] 匹配不在括號內(nèi)的任意字符;[?.]匹配普通的問號和點號
注意:
在 [] 中仍為轉(zhuǎn)義字符。如果要匹配反斜杠字符,使用兩個反斜杠
{} 標記限定符表達式的開始和結(jié)尾
{} 標記子表達式的開始和結(jié)尾,主要作用是分組,對內(nèi)容進行區(qū)分
(模式) 記住和這個模式匹配的匹配項(捕獲分組),不要濫用括號,如果不需要保存子表達式,可使用非捕獲型括號 (?:) 來進行性能優(yōu)化
(?:模式) 與模式匹配,但不保存匹配項(非捕獲分組)
(?=模式) 零寬正向先行斷言,要求匹配與模式匹配的搜索字符串。找到一個匹配項后,將在匹配文本之前開始搜索下一個匹配項;但不會保存匹配項
(?!模式) 零寬負向先行斷言,要求匹配與模式不匹配的搜索字符串。找到一個匹配項后,將在匹配文本之前開始搜索下一個匹配項;但不會保存匹配項
先行斷言 ?= 模式:x 只有在 y 前面才匹配,必須寫成 /x(?=y)/。解釋:找一個 x,那個 x 的后面要有 y
先行否定斷言 ?! 模式:x 只有不在 y 前面才匹配,必須寫成 /x(?!y)/。解釋:找一個 x,那個 x 的后面沒有 y
ES7提案
后行斷言( ?<= 模式):與”先行斷言”相反, x 只有在y后面才匹配,必須寫成 /(?<=y)x/。解釋:找一個 x,那個 x 的前面要有 y 。
后行否定斷言 ( ?<! 模式): 與”先行否定斷言“相反,x 只有不在y后面才匹配,必須寫成 /(?<!y)x/。 解釋:找一個x ,那個 x 的前面沒有 y。
反向引用:主要作用是給分組加上標識符 ln n 表示引用字符,與第 ln 個子表達式第一次匹配的字符相匹配
var str = "" + ""; // <(?!img) 表示找一個左尖括號<,而且左尖括號 < 的后面沒有img字符; // (?:.| | )*? 表示匹配左右尖括號<>里面的.或 或 ,而且匹配次數(shù)為*?;(?:)不保存匹配項,提高性能; // *后面加個? 表示非貪婪匹配。 var reg = /<(?!img)(?:.| | )*?>/gi; str.match(reg);" + "" + "" + "
反向引用的例子,給 MikeMike 字符后加個單引號:
var reg = /(Mike)(1)(s)/; var str = "MikeMikes"; console.log(str.replace(reg, "$1$2"$3")); // 返回結(jié)果 MikeMike"s
非打印字符
s 任何空白字符。即 [f
v]
S 任何非空白字符
Tab 字符 (u0009)
換行符 (u000A)
v 垂直制表符 (u000B)
f 換頁符 (u000C)
回車符 (u000D)
注意
和 一起使用,即 /[ ]/g 來匹配換行,因為 Unix 擴展的系統(tǒng)以 標志結(jié)尾,Windows 以 標志結(jié)尾
其他
cx 匹配 x 指示的控制字符,要求 x 的值必須在 A-Z 或 a-z 范圍內(nèi)
xn 匹配 n n 是一個十六進制轉(zhuǎn)義碼,兩位數(shù)長
un 匹配 n 其中 n 是以四位十六進制數(shù)表示的 Unicode 字符
m 或
先嘗試反向引用,不可則再嘗試標識為一個八進制轉(zhuǎn)義碼
ml 當 n 是八進制數(shù)字 (0-3),m 和 l 是八進制數(shù)字 (0-7) 時,匹配八進制轉(zhuǎn)義碼 nml
修飾符
i 執(zhí)行不區(qū)分大小寫的匹配
g 執(zhí)行一個全局匹配,即找到所有的匹配,而不是在找到第一個之后就停止
m 多行匹配模式,^ 匹配一行的開頭和字符串的開頭,$ 匹配行的結(jié)束和字符串的結(jié)束
ES6新增 u 和 y 修飾符
u 修飾符 Unicode 模式,用來正確處理大于 uFFFF 的 Unicode 字符。正確處理四個字節(jié)的 UTF-16 編碼
// 加u修飾符以后,ES6就會識別uD83DuDC2A為一個字符,返回false。 /^uD83D/u.test("uD83DuDC2A"); // false /^uD83D/.test("uD83DuDC2A"); // true
y 修飾符 與g 修飾符都是全局匹配,不同之處在于:lastIndex 屬性指定每次搜索的開始位置,g 修飾符從這個位置開始向后搜索,直到發(fā)現(xiàn)匹配為止;但是 y 修飾符要求必須在 lastIndex 指定的位置發(fā)現(xiàn)匹配,即 y 修飾符確保匹配必須從剩余的第一個位置開始
/b/y.exec("aba") // null /b/.exec("aba") // ["b"]
優(yōu)先級順序
轉(zhuǎn)義符
(),(?:),(?=),[] 括號和中括號
*、+、?、{n}、{n,}、{n,m} 限定符
任何元字符 ^、$、 定位點和序列
| 替換
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82367.html
摘要:正則表達式一直是里比較難以掌握的點。在中創(chuàng)建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結(jié)下,希望...
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
閱讀 1771·2021-11-25 09:43
閱讀 15327·2021-09-22 15:11
閱讀 2623·2019-08-30 13:19
閱讀 2009·2019-08-30 12:54
閱讀 1815·2019-08-29 13:06
閱讀 923·2019-08-26 14:07
閱讀 1612·2019-08-26 10:47
閱讀 3028·2019-08-26 10:41