JS基礎 正規表示式

2022-08-13 08:33:11 字數 4682 閱讀 2217

簡介

正規表示式 (regular expression) 描述了一種字串匹配的模式,可以用來檢查乙個字串是否含有某種子串、將匹配的子串做替換或者從某個字串中取出符合某個條件的子串等。在 js 中,regexp 物件和 string 物件的一些方法,如:"search()"、"match()"、"replace()" 等都支援正規表示式。

正規表示式的建立方式

1、例項建立方式:

var reg = new regexp(pattern, modifiers);

2、字面量建立方式:

var reg = /pattern/modifiers

pattern:正規表示式

modifiers:修飾符

修飾符主要包括:

i:忽略大小寫

g:全域性匹配,模式應用於所有字串,而非在找到第乙個匹配項時停止

3、例項建立方式和字面量建立方式的區別:

例項建立方式可以進行字串拼接,而字面量建立方式不可以,例如:

var str = 'test';

var reg1 = new regexp(str + '123');

var reg2 = /str/;

console.log(reg1); //輸出 /test123/

console.log(reg2); //輸出 /str/

例項建立方式需要進行字串轉義,而字面量建立方式不需要,例如:

//下面兩條語句是等價的

var reg1 = new regexp('\\d');

var reg2 = /\d/;

這是因為在字串中 '\' 是轉義字元,需要轉義 '\',即 '\\'。

語法1、修飾符

i不區分大小寫

m多行匹配

g全域性匹配

2、元字元

.匹配除了換行符 '\n' 以外的任意乙個字元

\w匹配數字、字母和下劃線

\w匹配數字、字母和下劃線之外的任意乙個字元

\d匹配數字

\d匹配非數字

\s匹配空白字元

\s匹配非空白字元

\b匹配單詞邊界

\b匹配非單詞邊界

\0匹配 'null' 字元

\n匹配換行符

\f匹配換頁符

\r匹配回車符

\t匹配製表符

\v匹配垂直製表符

3、量詞

+匹配 1 到多個

*匹配 0 到多個

?匹配 0 個或 1 個

匹配 n 個

匹配 n 到多個

匹配 n 到 m 個

x$匹配結尾為 x 的字串

^x匹配開頭為 x 的字串

?=x零寬度正先行斷言,僅當子表示式 x 在字串位置的右側匹配時才匹配

?!x零寬度負先行斷言,僅當子表示式 x 不在字串位置的右側匹配時才匹配

?<=x

零寬度正後發斷言,僅當子表示式 x 在字串位置的左側匹配時才匹配

?零寬度負後發斷言,僅當子表示式 x 不在字串位置的左側匹配時才匹配

4、方括號與圓括號

方括號用於給定某個範圍的字元集合

[abcd]

匹配給定集合中的任何字元

[^abcd]

匹配給定集合外的任何字元

[0-9]

匹配從 0 到 9 的數字

[a-z]

匹配從 a 到 z 的字母

圓括號和計算表示式一樣,可以提高優先順序,也可以用於分組,例如:/a?/ 匹配 0 個或 1 個 'a',/(abc)?/ 則匹配 0 個或 1個 'abc'

5、優先順序

\ :轉義符

?: 、() 、 :圓括號和方括號等

+ 、* 、? 、 、 、 :量詞限定符等

$ 、^ 以及任何元字元和字元

| :或操作

regexp 物件的 test() 方法

regexpobject.test(string) :用於檢測乙個字串是否匹配某個模式,如果字串中有匹配的值返回 true ,否則返回 false,例如:

var str = 'hello world';

var reg = /hello/;

console.log(reg.test(str)); //輸出 true

regexp 物件的 exec() 方法

regexpobject.exec(string) :用於檢測乙個字串是否匹配某個模式,如果字串中有匹配的值返回乙個結果陣列,否則返回 null,例如:

var str = 'hello world';

var reg = /hello/;

console.log(reg.exec(str)); //輸出 ["hello", index: 0, input: "hello world"]

此結果陣列的第 0 個元素是與正規表示式匹配的文字,第 1 個元素是與第 1 個分組匹配的文字,第 2 個元素是與第 2 個分組匹配的文字,以此類推。除了陣列元素和 length 屬性外 exec() 方法還返回兩個屬性:index 屬性儲存的是匹配文字的第乙個字元的位置,input 屬性則存放的是被檢索的字串,例如:

var str = 'hello world';

var reg = /hel(lo)/;

console.log(reg.exec(str)); //輸出 ["hello", "lo", index: 0, input: "hello world"]

如果正規表示式使用了全域性匹配修飾符 'g',那麼在使用了 exec() 方法後,regexpobject 物件的 'lastindex' 屬性會設定為匹配文字的最後乙個字元的下乙個位置,exec() 方法會在 'lastindex' 指定的位置開始檢索字串,這時你需要手動反覆呼叫 exec() 方法來全域性匹配所有符合的文字,直到 exec() 方法再也找不到符合的文字時,它將返回 null,並把 'lastindex' 屬性重置為 0 ,例如:

var str = 'hello world';

var reg = /hello/;

console.log(reg.lastindex); //輸出 0

var str = 'hello world';

var reg = /hello/g;

console.log(reg.lastindex); //輸出 5

string 物件的 search() 方法

string.search(regexpobject) :用於檢索與正規表示式相匹配的子字串,如果檢索到返回匹配子字串第乙個字元的位置,否則返回 -1,例如:

var str = 'hello world';

var reg = /hello/i;

console.log(str.search(reg)); //輸出 0

string 物件的 replace() 方法

string.replace(regexpobject

,newvalue) :用於替換與正規表示式相匹配的子字串,返回替換後的新字串,例如:

var str = 'hello world';

var reg = /hello/i;

console.log(str.replace(reg,'newstring')); //輸出 newstring world

string 物件的 match() 方法

string.match(regexpobject) :用於檢測乙個字串是否匹配某個模式,如果字串中有匹配的值返回乙個結果陣列,否則返回 null,例如:

var str = 'hello world';

var reg = /hello/;

console.log(str.match(reg)); //輸出 ["hello", index: 0, input: "hello world"]

regexp 物件的 exec() 方法和 string 物件的 match() 方法的區別:

1、當正規表示式沒有分組,且非全域性匹配時:exec() 方法和 match() 方法執行結果相同,均返回上述結果陣列

2、當正規表示式有分組,且非全域性匹配時:exec() 方法和 match() 方法執行結果相同,均返回上述結果陣列,此結果陣列的第 0 個元素是與正規表示式匹配的文字,第 1 個元素是與第 1 個分組匹配的文字,第 2 個元素是與第 2 個分組匹配的文字,以此類推

3、當正規表示式沒有分組,且全域性匹配時:exec() 方法和 match() 方法執行結果不同,exec() 返回上述結果陣列(同非全域性匹配),但是設定了 regexpobject 物件的 'lastindex' 屬性,此時可以根據 'lastindex' 屬性的值反覆呼叫完成全域性匹配;match() 方法則直接返回乙個陣列,包含所有匹配的元素

4、當正規表示式有分組,且全域性匹配時:exec() 方法和 match() 方法執行結果不同,exec() 返回上述結果陣列(同非全域性匹配);match() 方法則忽略分組,只保留全域性匹配的元素

也就是說,在非全域性匹配時,exec() 方法和 match() 方法是完全相同的,在全域性匹配時,match() 方法會忽略分組,只保留全域性匹配的元素,exec() 方法則不會忽略分組,而是通過 'lastindex' 屬性進行全域性匹配

js基礎 正規表示式

正規表示式用於定義一些字串的規則。計算機可以根據正規表示式來檢查乙個字串是否符合規則 正規表示式也可以將符合條件的字串的內容提取出來。結果 true 結果 falsen 匹配任何包含至少乙個 n 的字串。n 匹配任何包含零個或多個 n 的字串。n?匹配任何包含零個或乙個 n 的字串。n匹配包含 x ...

js基礎(正規表示式)

正規表示式用於定義一些字串的規則,計算機可以根據正規表示式,來檢查乙個字串是否符合規則,獲取將字串中符合規則的內容提取出來 建立正規表示式 var reg new regexp 正規表示式 匹配模式 使用正規表示式檢測正則物件,會返回object console.log typeof new reg...

JS基礎 正規表示式

正規表示式用於定義一些字串的規則,計算機可以根據正規表示式,來檢查乙個字串是否符合規則,或者將字串中符合規則的內容提取出來 建立正規表示式的物件 語法 var 變數 new regexp 正規表示式 匹配模式 使用typeof檢查正則物件,會返回object var reg new regexp a...