js正則表示式用法

來源:趣味經驗館 2.05W

1、正則表示式簡介:

普通方式:var reg=/表示式/附加引數

附件引數:

g:代表可以進行全域性匹配。
i:代表不區分大小寫匹配。
m:代表可以進行多行匹配。

上面三個引數,可以任意組合,代表複合含義,當然也可以不加引數。
舉例:
var reg=/a*b/;
var reg=/abc+f/g;

構造函式方式:var reg=new RegExp(“表示式”,”附加引數”);

舉例:
var reg=new RegExp(“a*b”);
var reg=new RegExp(“abc+f”,”g”);

兩者區別:

普通方式中的表示式必須是一個常量字串,而建構函式中的表示式可以是常量字串,也可以是一個js變數,例如根據使用者的輸入來作為表示式引數等等:var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

js正則表示式用法

2、正則表示式的操作:

表示式物件(RegExp)方法:

①exec(str),返回str中與表示式相匹配的第一個字串,而且以陣列的形式表現,當然如果表示式中含有捕捉用的小括號,則返回的陣列中也可能含有()中的匹配字串,例如:
var regx=//d+/;
var rs=regx.exec(“3432ddf53”);
返回的rs值為:{3432}
var regx2=new RegExp(“ab(/d+)c”);
var rs2=regx2.exec(“ab234c44”);
返回的rs值為:{ab234c,234}
另外,如果有多個合適的匹配,則第一次執行exec返回一個第一個匹配,此時繼續執行exec,則依次返回第二個第三個匹配。例如:
var regx=/user/d/g;
var rs=regx.exec(“ddduser1dsfuser2dd”);
var rs1=regx.exec(“ddduser1dsfuser2dd”);
則rs的值為{user1},rs的值為{rs2},當然注意regx中的g引數是必須的,否則無論exec執行多少次,都返回第一個匹配。後面還有相關內容涉及到對此想象的解釋。

②test(str),判斷字串str是否匹配表示式,返回一個布林值。例如:
var regx=/user/d+/g;
var flag=regx.test(“user12dd”);
flag的值為true。

js正則表示式用法 第2張

String物件方法:

①match(expr),返回與expr相匹配的一個字串陣列,如果沒有加引數g,則返回第一個匹配,加入引數g則返回所有的匹配
例子:
var regx=/user/d/g;
var str=“user13userddduser345”;
var rs=str.match(regx);
rs的值為:{user1,user3}

②search(expr),返回字串中與expr相匹配的第一個匹配的index值。
例子:
var regx=/user/d/g;
var str=“user13userddduser345”;
var rs=str.search(regx);
rs的值為:0

③replace(expr,str),將字串中匹配expr的部分替換為str。另外在replace方法中,str中可以含有一種變數符號$,格式為$n,代表匹配中被記住的第n的匹配字串(注意小括號可以記憶匹配)。
例子1:
var regx=/user/d/g;
var str=“user13userddduser345”;
var rs=str.replace(regx,”00”);
rs的值為:003userddd0045
例子2:
var regx=/u(se)r/d/g;
var str=“user13userddduser345”;
var rs=str.replace(regx,”$1”);
rs的值為:se3userdddse45
對於replace(expr,str)方法還要特別注意一點,如果expr是一個表示式物件則會進行全域性替換(此時表示式必須附加引數g,否則也只是替換第一個匹配),如果expr是一個字串物件,則只會替換第一個匹配的部分。

js正則表示式用法 第3張

例如:
var regx=“user”
var str=“user13userddduser345”;
var rs=str.replace(regx,”00”);
rs的值為: 0013userddduser345

④split(expr),將字串以匹配expr的部分做分割,返回一個數組,而且表示式是否附加引數g都沒有關係,結果是一樣的。
例子:
var regx=/user/d/g;
var str=“user13userddduser345”;
var rs=str.split(regx);
rs的值為:{3userddd,45}

熱門標籤