JavaScript(ES6) - 正則表達(dá)

正則表達(dá)式簡介:

(Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串搜索模式,搜索模式可用于文本搜索和文本替換。

RegExp 構(gòu)造函數(shù) => 語法:

第一種 : 參數(shù)是字符串,這時(shí)第二個(gè)參數(shù)表示正則表達(dá)式的修飾符(flag)。

var regex = new RegExp('xyz', 'i');
// 等價(jià)于
var regex = /xyz/i;

第二種:參數(shù)是一個(gè)正則表示式,這時(shí)會(huì)返回一個(gè)原有正則表達(dá)式的拷貝。

var regex = new RegExp(/xyz/i);
// 等價(jià)于
var regex = /xyz/i;
// xyz  是一個(gè)正則表達(dá)式主體 (用于檢索)
// i  是一個(gè)修飾符 (搜索不區(qū)分大小寫)

但是,ES5 不允許此時(shí)使用第二個(gè)參數(shù)添加修飾符,否則會(huì)報(bào)錯(cuò)。

var regex = new RegExp(/xyz/, 'i');
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another

ES6 改變了這種行為,如果RegExp構(gòu)造函數(shù)第一個(gè)參數(shù)是一個(gè)正則對(duì)象,那么可以使用第二個(gè)參數(shù)指定修飾符。而且,返回的正則表達(dá)式會(huì)忽略原有的正則表達(dá)式的修飾符,只使用新指定的修飾符。

new RegExp(/abc/ig, 'i').flags

上面代碼中,原有正則對(duì)象的修飾符是ig,它會(huì)被第二個(gè)參數(shù)i覆蓋。


常用的6個(gè)方法,可以使用正則表達(dá)式:match()、replace()、 test()、search()、exec()和split()。
search() 方法 用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串。


search() 方法使用正則表達(dá)式:

使用正則表達(dá)式搜索 "xyz" 字符串,且不區(qū)分大小寫:
var str = "Visit xyz!"; 
var n = str.search(/xyz/i);
console.log(n)//6

replace() 方法使用正則表達(dá)式:

使用正則表達(dá)式且不區(qū)分大小寫將字符串中的"123" 替換為"xyz" :
var str = "Visit 123"; 
var txt = str.replace(/123/i,"xyz");
console.log(txt) //Visit xyz

test() 方法使用正則表達(dá)式:

方法用于檢測一個(gè)字符串是否匹配某個(gè)模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false:
var patt = /in/;
let a   = patt.test("The best things in life are free!");
console.log(a) //true

exec() 方法使用正則表達(dá)式:

該函數(shù)返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
var patt = /in/;
let a   =patt.exec("The best things in life are free!");
console.log(a) //e

正則表達(dá)式修飾符:

修飾符 描述
i 執(zhí)行對(duì)大小寫不敏感的匹配
g 執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)
m 執(zhí)行多行匹配

修飾符 可以在全局搜索中不區(qū)分大小寫:

修飾符 描述
i 執(zhí)行對(duì)大小寫不敏感的匹配
g 執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)
m 執(zhí)行多行匹配

方括號(hào)用于查找某個(gè)范圍內(nèi)的字符:

表達(dá)式 描述
[abc] 查找方括號(hào)之間的任何字符
[[abc]] 查找方括號(hào)之間的任何字符。
[^abc] 查找任何不在方括號(hào)之間的字符。
[0-9] 查找任何從 0 至 9 的數(shù)字
(x/y) 查找任何以 /分隔的選項(xiàng)
[a-z] 查找任何從小寫 a 到小寫 z 的字符
[A-Z] 查找任何從大寫 A 到大寫 Z 的字符
[A-z] 查找任何從大寫 A 到小寫 z 的字符
[adgk] 查找給定集合內(nèi)的任何字符
[^adgk] 查找給定集合外的任何字符
(red/blue/green) 查找任何指定的選項(xiàng)

元字符是擁有特殊含義的字符:

元字符 描述
\d 查找數(shù)字
\s 查找空白字符
\b 匹配單詞邊界
\uxxxx 查找以十六進(jìn)制數(shù) xxxx 規(guī)定的 Unicode 字符
[.] 查找單個(gè)字符,除了換行和行結(jié)束符
[\w] 查找單詞字符
[\W] 查找非單詞字符
[\d] 查找數(shù)字
[\D] 查找非數(shù)字字符
[\s] 查找空白字符
[\S] 查找非空白字符
[\b] 匹配單詞邊界
[\B] 匹配非單詞邊界
\0 查找 NULL 字符
[\n] 查找換行符
\f 查找換頁符
\r 查找回車符
\t 查找制表符
\v 查找垂直制表符
[\xxx] 查找以八進(jìn)制數(shù) xxx 規(guī)定的字符
[\xdd] 查找以十六進(jìn)制數(shù) dd 規(guī)定的字符

量詞:

量詞 描述
n+ 匹配任何包含至少一個(gè) n 的字符串
n* 匹配任何包含零個(gè)或多個(gè) n 的字符串
n? 匹配任何包含零個(gè)或一個(gè) n 的字符串
[n+] 匹配任何包含至少一個(gè) n 的字符串。例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。
[n*] 匹配任何包含零個(gè)或多個(gè) n 的字符串。例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。
[n?] 匹配任何包含零個(gè)或一個(gè) n 的字符串。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
[n{X}] 匹配包含 X 個(gè) n 的序列的字符串。例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的兩個(gè) "a",且匹配 "caaandy." 中的前兩個(gè) "a"。
[n$] 匹配任何結(jié)尾為 n 的字符串。
[^n] 匹配任何開頭為 n 的字符串。
[?=n] 匹配任何其后緊接指定字符串 n 的字符串。
[?!n] 匹配任何其后沒有緊接指定字符串 n 的字符串。
n{X,} X 是一個(gè)正整數(shù)。前面的模式 n 連續(xù)出現(xiàn)至少 X 次時(shí)匹配。例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"

聲明:內(nèi)容來源于網(wǎng)絡(luò),如有侵犯,請(qǐng)作者聯(lián)系。

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

相關(guān)閱讀更多精彩內(nèi)容

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