正則表達式基本概念

引用文字

什麼是正則表達式

正則表達式是一個描述字符模式的對象。主要用來驗證客戶端的輸入數據,用戶填寫完表單信息提交後,就會傳遞給後臺服務器,服務器會經過PHP等後臺腳本進行處理,由於客戶端驗證,節約了大量的服務器資源,並提供了良好的用戶體驗。正則表達式

建立正則表達式

建立正則表達式有兩種方法:數組

  1. 使用RegExp構建函數接收兩個參數:一個是要匹配的字符串,一個是模式修飾符(可選)
    var pattern = new RegExp('box');
  2. 字面量方式建立,直接使用兩個斜槓。在第二個斜槓後面加上模式修飾符(可選)
    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替換成QQgoogle8不變,就是咱們看到的結果。

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替換成QQgoogle不變,8, There is 8替換成QQgoogle8不變,就是咱們看到的結果。

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

  1. a-zA-Z0-9
  2. 0-9
相關文章
相關標籤/搜索