引用文字
正則表達式是一個描述字符模式的對象。主要用來驗證客戶端的輸入數據,用戶填寫完表單信息提交後,就會傳遞給後臺服務器,服務器會經過PHP等後臺腳本進行處理,由於客戶端驗證,節約了大量的服務器資源,並提供了良好的用戶體驗。正則表達式
建立正則表達式有兩種方法:數組
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) |
返回用空格拆分的數組 |
例:this
var pattern = /box/ig; var str = "This is Box! This is Box!"; alert(str.match(pattern)); //Box Box
開啓全局模式,將全部匹配的字符串組合成數組;
未開啓全局模式,匹配到第一個字符串就返回。google
var pattern = /box/ig; var str = "This is Box! This is Box!"; alert(str.replace(pattern,'Tom')); //This is Box! This is Box!
開啓全局模式,將匹配到的字符串所有替換掉;
未開啓全局模式,只替換掉第一個查找到的字符串。code
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