正則表達(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)系。