援用筆墨
什麼是正則表達式
正則表達式是一個形貌字符形式的對象。重要用來考證客戶端的輸入數據,用戶填寫完表單信息提交后,就會傳遞給背景服務器,服務器會經由過程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