簡介
正規表示式 (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...