成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【重溫基礎(chǔ)】9.正則表達(dá)式

ispring / 3313人閱讀

摘要:前置知識(shí)中的正則表達(dá)式是用來匹配字符串中指定字符組合的模式。另外需要記住正則表達(dá)式也是對(duì)象。在正則表達(dá)式創(chuàng)建時(shí)更新,不執(zhí)行。替換與正則表達(dá)式匹配的子串。查找以十六進(jìn)制數(shù)規(guī)定的字符。正則表達(dá)式拓展介紹在中有兩種情況。

本文是 重溫基礎(chǔ) 系列文章的第九篇。
今日感受:時(shí)間管理-角色管理法。

系列目錄:

【復(fù)習(xí)資料】ES6/ES7/ES8/ES9資料整理(個(gè)人整理)

【重溫基礎(chǔ)】1.語法和數(shù)據(jù)類型

【重溫基礎(chǔ)】2.流程控制和錯(cuò)誤處理

【重溫基礎(chǔ)】3.循環(huán)和迭代

【重溫基礎(chǔ)】4.函數(shù)

【重溫基礎(chǔ)】5.表達(dá)式和運(yùn)算符

【重溫基礎(chǔ)】6.數(shù)字

【重溫基礎(chǔ)】7.時(shí)間對(duì)象

【重溫基礎(chǔ)】8.字符串

本章節(jié)復(fù)習(xí)的是JS中的正則表達(dá)式,JS中用來匹配字符串的強(qiáng)大工具。

前置知識(shí):
JS中的正則表達(dá)式是用來匹配字符串中指定字符組合的模式。
另外需要記?。赫齽t表達(dá)式也是對(duì)象。

1.創(chuàng)建正則表達(dá)式

使用一個(gè)正則表達(dá)式字面量:

let reg = /ab+c/;
let reg = /^[a-zA-z]/gi;

使用RegExp對(duì)象:

new RegExp(str[, attr])接收2個(gè)參數(shù),str是一個(gè)字符串,指定正則表達(dá)式匹配規(guī)則,attr可選,表示匹配模式,值有g(全局匹配),i(區(qū)分大小寫的匹配)和m(多行匹配)。

let reg = new RegExp("ab+c");
let reg = new RegExp(/^[a-zA-z]/, "gi");
let reg = new RegExp("^[a-zA-z]", "gi");

正則表達(dá)式的返回值,是一個(gè)新的RegExp對(duì)象,具有指定的模式和標(biāo)志。
返回信息介紹

對(duì)象 屬性 描述 案例中對(duì)應(yīng)的值
reg lastIndex 下一個(gè)匹配的索引(僅在使用g參數(shù)時(shí)可用) 0
reg source 模式文本。在正則表達(dá)式創(chuàng)建時(shí)更新,不執(zhí)行。 "ab+c"
reg ignoreCase 是否使用了 "i" 標(biāo)記使正則匹配忽略大小寫。 true
reg global 是否使用了 "g" 標(biāo)記來進(jìn)行全局的匹配。 true
reg multiline 是否使用了 "m" 標(biāo)記使正則工作在多行模式。 false

關(guān)于正則表達(dá)式的一些方法屬性,文章后面介紹,這里先復(fù)習(xí)定義和使用。

2.使用正則表達(dá)式

JS的正則表達(dá)式可以被用于:

RegExp對(duì)象的exectest方法;

String對(duì)象的match、replace、searchsplit方法。

2.1 RegExp對(duì)象方法
方法 介紹
exec 檢索字符串中指定的值。返回找到的值,并確定其位置。
test 檢索字符串中指定的值。返回 truefalse。
2.1.1 exec(str)

str: 需要檢索的字符串。
若檢索成功,返回匹配的數(shù)組,否則返回null。

let str = "hello leo!";
let reg = new RegExp("leo", "g");
let result = reg.exec(str);
// 也可以寫成
let result = /leo/g.exec("hello leo!");

/*
[
    0: "leo",
    groups: undefined,
    index: 6,
    input: "hello leo!",
    length: 1
]
*/

let result2 = /(leo S)/g.exec("hello leo hi leo!");
/*
    0: "leo hi"
    1: "leo hi"
    2: "hi"
    groups: undefined
    index: 6
    input: "hello leo hi leo!"
    length: 3
*/

返回信息介紹

對(duì)象 屬性 描述 案例中對(duì)應(yīng)的值
result [0] 匹配到的所有字符串 "leo"
result input 初始字符串。 "hello leo!"
result index 在輸入的字符串中匹配到的以0開始的索引值。 6
result2 [1],...,[n] 括號(hào)中的分組捕獲 [1]=> "leo hi";[2] => "hi"
2.1.2 test(str)

str:需要檢索的字符串。
若匹配成功返回true否則false。
等價(jià)于 reg.exec(str) != null。

let str = "hello leo!";
let res = /^leo/.test(str);   // fasle
let res1 = /^leo/.test(str);  // true

^str表示匹配以str開頭的字符串,這些符號(hào)文章后面會(huì)介紹。

2.2 String對(duì)象方法
方法 介紹
search 檢索與正則表達(dá)式相匹配的值。
match 找到一個(gè)或多個(gè)正則表達(dá)式的匹配。
replace 替換與正則表達(dá)式匹配的子串。
split 把字符串分割為字符串?dāng)?shù)組。
2.2.1 search

str.search(reg)
str:被檢索的源字符串。
reg:可以是需要檢索的字符串,也可以是需要檢索的RegExp對(duì)象,可以添加標(biāo)志,如i

若檢索成功,返回第一個(gè)RegExp對(duì)象匹配的字符串的起始位置,否則返回-1。

let str = "hello leo!";
let res = str.search(/leo/g);  // 6

let str1 = "hello leoleoleoleo!";
let res1 = str.search(/leo/g); // 6
let res2 = str.search(/pingan/g); // -1
2.2.2 match

str.match(reg)
str:被檢索的源字符串。
reg:可以是需要檢索的字符串,也可以是需要檢索的RegExp對(duì)象,可以添加標(biāo)志,如i

若檢索成功,返回與reg匹配的所有結(jié)果的一個(gè)數(shù)組,數(shù)組的第一項(xiàng)是進(jìn)行匹配完整的字符串,之后的項(xiàng)是用圓括號(hào)捕獲的結(jié)果,否則返回null。

let str = "For more information, see Chapter 3.4.5.1";
let reg = /see (chapter d+(.d)*)/i;
let result = str.match(reg);
/*
logs [ "see Chapter 3.4.5.1",
       "Chapter 3.4.5.1",
       ".1",
       index: 22,
       input: "For more information, see Chapter 3.4.5.1" ]
*/

"see Chapter 3.4.5.1" 是整個(gè)匹配。
"Chapter 3.4.5.1""(chapter d+(.d)*)"捕獲。
".1" 是被"(.d)"捕獲的最后一個(gè)值。
"index" 屬性(22) 是整個(gè)匹配從零開始的索引。
"input" 屬性是被解析的原始字符串。

2.2.3 replace

將字符串中指定字符替換成其他字符,或替換成一個(gè)與正則表達(dá)式匹配的字符串。
str.replace(sub/reg,val):

str: 源字符串

sub: 使用字符串來檢索被替換的文本

reg: 使用RegExp對(duì)象來檢索來檢索被替換的文本

val: 指定替換文本

返回替換成功之后的字符串,不改變?cè)醋址畠?nèi)容。

let str = "hello leo!";
let res = str.replace("leo","pingan");//"hello pingan!"

val可以使用特殊變量名

變量名 代表的值
$$ 插入一個(gè) "$"。
$& 插入匹配的子串。
$ 插入當(dāng)前匹配的子串左邊的內(nèi)容。
$" 插入當(dāng)前匹配的子串右邊的內(nèi)容。
$n 假如第一個(gè)參數(shù)是 RegExp對(duì)象,并且 n 是個(gè)小于100的非負(fù)整數(shù),那么插入第 n 個(gè)括號(hào)匹配的字符串。提示:索引是從1開始
let str = "hello leo!";
let res = str.replace(/(w+)s* s*(w+)/, "$2:$1");
// "leo:hello!"
2.2.4 split

將一個(gè)字符串,按照指定符號(hào)分割成一個(gè)字符串?dāng)?shù)組。
str.split(sub[, maxlength]):

str: 源字符串

sub: 指定的分割符號(hào)或正則

maxlength: 源字符串

let str = "hello leo!";
let res = str.split();   //["hello leo!"]
let res = str.split(""); //["h", "e", "l", "l", "o", " ", "l", "e", "o", "!"]
let res = str.split(" ");//["hello", "leo!"]
let res = str.split(/s+/);//["hello", "leo!"]

let res = str.split("",3);//["h", "e", "l"]
2.3 使用情況

當(dāng)我們想要查找一個(gè)字符串中的一個(gè)匹配是否找到,可以用testsearch方法。

當(dāng)我們想要得到匹配的更多信息,我們就需要用到execmatch方法。

3.正則表達(dá)式符號(hào)介紹

詳細(xì)的每個(gè)符號(hào)的用法,可以查閱 W3school JavaScript RegExp 對(duì)象

3.1 修飾符
修飾符 描述
i 執(zhí)行對(duì)大小寫不敏感的匹配。
g 執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)。
m 執(zhí)行多行匹配。
let str = "hello leo!"
let res = /Leo/i.test(str); // i 不區(qū)分大小寫 所以返回true
let res = /Leo/.test(str);  // fasle
3.2 方括號(hào)

用于查找指定返回之內(nèi)的字符:

表達(dá)式 描述
[abc] 查找方括號(hào)之間的任何字符。
[^abc] 查找任何不在方括號(hào)之間的字符。
[0-9] 查找任何從 0 至 9 的數(shù)字。
[a-z] 查找任何從小寫 a 到小寫 z 的字符。
[A-Z] 查找任何從大寫 A 到大寫 Z 的字符。
[A-z] 查找任何從大寫 A 到小寫 z 的字符。
[adgk] 查找給定集合內(nèi)的任何字符。
[^adgk] 查找給定集合外的任何字符。
(red) 查找任何指定的選項(xiàng)。
let str = "hello leo!";
let res = str.match(/[a-m]/g);
//["h", "e", "l", "l", "l", "e"]
let res = str.match(/[^a-m]/g);
//["o", " ", "o", "!"]
3.3 元字符

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

元字符 描述
. 查找單個(gè)字符,除了換行和行結(jié)束符。
w 查找單詞字符。
W 查找非單詞字符。
d 查找數(shù)字。
D 查找非數(shù)字字符。
s 查找空白字符。
S 查找非空白字符。
 匹配單詞邊界。
B 匹配非單詞邊界。