引用文字
什麼是正規表示式
正規表示式是一個描述字元模式的物件。主要用來驗證客戶端的輸入資料,使用者填寫完表單資訊提交後,就會傳遞給後臺伺服器,伺服器會通過PHP等後臺指令碼進行處理,因為客戶端驗證,節約了大量的伺服器資源,並提供了良好的使用者體驗。
建立正規表示式
建立正規表示式有兩種方法:
- 使用RegExp構建函式接收兩個引數:一個是要匹配的字串,一個是模式修飾符(可選)
var pattern = new RegExp(`box`);
- 字面量方式建立,直接使用兩個斜槓。在第二個斜槓後面加上模式修飾符(可選)
var pattern = /box/ flags;
//兩個斜槓和box之間不能有空格
模式修飾符的可選引數:
引數 | 含義 |
---|---|
g | 全域性模式(global) |
i | 不區分大小寫(case-insensitive) |
m | 多行模式(multiline) |
測試正規表示式
exct()
接收一個引數,該引數和模式匹配,把模式作為陣列返回;未匹配到返回null
test()
接收一個引數,該引數和模式匹配,返回true
,否則返回false
使用字串的正規表示式方法
String物件中的正規表示式方法:
方法 | 含義 |
---|---|
match(pattern) |
返回匹配到模式中的字串或null
|
replace(pattern,replacement) |
用replacement 替換pattern
|
search(pattern) |
返回字串中pattern 開始的位置 |
split(pattern) |
返回用空格拆分的陣列 |
例:
var pattern = /box/ig;
var str = "This is Box! This is Box!";
alert(str.match(pattern)); //Box Box
開啟全域性模式,將所有匹配的字串組合成陣列;
未開啟全域性模式,匹配到第一個字串就返回。
var pattern = /box/ig;
var str = "This is Box! This is Box!";
alert(str.replace(pattern,`Tom`)); //This is Box! This is Box!
開啟全域性模式,將匹配到的字串全部替換掉;
未開啟全域性模式,只替換掉第一個查詢到的字串。
var pattern = /box/i;
var str = "This is Box! This is Box!";
alert(str.search(pattern)); //8
查詢返回的位置:查到返回對應的位置,未查到返回-1
;無需全域性模式。
var pattern = / /i;
var str = "This is Box! This is Box!";
alert(str.split(pattern));
返回用空格拆分的陣列
RegExp物件的靜態屬性:
屬性 | 短名 | 含義 |
---|---|---|
input | $_ | 當前被匹配的字串 |
lastMatch | $& | 最後一個匹配字串 |
lastParen | $+ | 最後一對圓括號內的匹配子串 |
leftContext | $` | 最後一次匹配前的字串 |
multiline | $* | 用於指定是否所有的表示式都用於多行的,返回布林值 |
rightContext | $` | 最後一次匹配之後的字串 |
所有的屬性都可以用短名來操作,其中$_
可以用點表示法來操作,其他都不可以。
正規表示式元字元是包含特殊含義的字元,可以控制匹配模式的方式。反斜槓後的元字元將失去其含義。
獲取控制
字元類:單個字元和數字
元字元/元符號 | 匹配情況 |
---|---|
. | 匹配除換行符號外的任意字元 |
[a-zA-Z0-9] | 匹配方括號中任意字元 |
1 | 匹配不是方括號中任意字元 |
d | 匹配任意數字和[0-9]相同 |
D | 匹配非數字和2相同1 |
w | 匹配字母和數字及_ |
W | 匹配非字母和數字及_ |
字元類:空白字元
元字元/元符號 | 匹配情況 |
---|---|
0 | 匹配null 字元 |
b | 匹配空格字元 |
f | 匹配進紙字元 |
n | 匹配換行符 |
r | 匹配回車字元 |
t | 匹配製表符 |
s | 匹配空白字元、空格、製表符和換行符 |
S | 匹配非空白字元 |
字元類:替代字元
元字元/元符號 | 匹配情況 | |||
---|---|---|---|---|
this | where | logo | 匹配 this 或 where 或 logo 中任意一個,` | `必須用分組符號包含起來 |
字元類:錨字元
元字元/元符號 | 匹配情況 |
---|---|
^ | 行首匹配 |
$ | 行尾匹配 |
A | 只有匹配字串開始處 |
b | 匹配單詞邊界,詞在[]內時無效 |
B | 匹配非單詞邊界 |
G | 匹配當前搜尋的開始位置 |
Z | 匹配字串結束處或行尾 |
z | 只匹配字串結束處 |
字元類:重複字元
元字元/元符號 | 匹配情況 |
---|---|
x? | 匹配0個或1個x
|
x* | 匹配0個或1個或多個x
|
x+ | 匹配1個或多個x
|
(xyz)+ | 匹配至少一個(xyz) |
x{m,n} | 匹配最少m個、最多n個x
|
字元類:替代字元
元字元/元符號 | 匹配情況 |
---|---|
(string) | 分組表示一個字元,用圓括號表示 |
1 或$1 | 匹配第一個分組中的內容 |
2 或$2 | 匹配第二個分組中的內容 |
3 或$3 | 匹配第三個分組中的內容 |
貪婪和惰性(非貪婪)
貪婪是儘可能多的匹配內容,惰性(非貪婪)這是儘可能少的匹配內容
貪婪是從結尾開始匹配,惰性(非貪婪)是從開頭開始匹配
貪婪 | 惰性 |
---|---|
+ | +? |
? | ?? |
* | *? |
{n} | {n}? |
{n,} | {n,}? |
{n,m} | {n,m}? |
下面例子匹配8和8中的內容,把他替換成QQ
var pattern = /8(.+?)8/g;
var str = `This is 8google8, That is 8google8, There is 8google8`;
var result = str.replace(pattern,`QQ`);
document.write(result);
輸出結果:This is QQ, That is QQ, There is QQ
錯誤匹配:8google, That is 8
換成QQ
,google
不變,8, There is 8
替換成QQ
,google8
不變,就是我們看到的結果。
var pattern = /8(.+?)8/g;
var str = `This is 8google, That is 8google8, There is 8google8`;
var result = str.replace(pattern,`QQ`);
document.write(result);
輸出結果:This is QQgoogleQQgoogle8
錯誤匹配:8google8
換成QQ
,google
不變,8, That is 8
替換成QQ
,google
不變,8, There is 8
替換成QQ
,google8
不變,就是我們看到的結果。
var pattern = /8(.+?)8/g;
var str = `This is 8google8google8, That is 8google8, There is 8google8`;
var result = str.replace(pattern,`>QQ`);
document.write(result);
輸出結果:This is QQgoogleQQgoogleQQgoogle8