天天看點

Javascript學習筆記——正規表達式

1、正規表達式的建立

在js中建立正規表達式有兩種方式:

1、建立對象

var reg=new RegExp(“規則”,”标志”);

使用此方法構造正規表達式時,是一個字元串,是以要注意用\來對一些字元進行轉移.

var reg =new RegExp(“\d\d”,”i”);

2、字面量

var reg=/規則/标志;

var reg =/\d\d/i;

2、标志

i 不區分大小寫

g 全局比對

m 多行

3、規則

\ 轉義字元,可以将下一個字元标記為一個特殊字元或一個原義字元或一個向後引用或一個八進制轉義符,例如: “\n”表示換行符

[ ] 字元集合,比對其中的任意一個字元

[a-z] 字元範圍,比對指定範圍的任意一個字元

[^ ] 負值字元集合,比對未包含的任意一個字元。

( ) 比對子項,括号内為一個子表達式,子項可以擷取供以後使用。

| 表示或者 ( x|y )相當于[xy]

{ n } n是一個非負整數,表示前面的字元出現n次

{ n, } n是一個非負整數,表示前面的字元至少出現n次

{ n,m } n,m是一個非負整數,且n < m,表示前面的字元至少出現n次,至多出現m次

^ 從開始位置比對,如果設定了m标志,^也比對“\n”或“\r”之後的位置。

$ 從結束位置比對,如果設定了m标志,$也比對“\n”或“\r”之前的位置。

+ 至少出現1次 ,{1,}

? 出現0次或1次 ,{0,1}

* 出現任意次,至少出現0次 ,{0,}

\s 比對空格

\S 比對非空格

\w 比對包括下劃線的任何單字元,[a-zA-Z0-9_]

\W 比對任何非單字元[^a-zA-Z0-9_]

\d 比對一個數字字元

\D 比對一個非數字字元

\b 比對一個單詞邊界

\B 比對一個非單詞邊界

. 比對除去“\n”之外的任一個字元

上面隻介紹了一些常用的規則,下面這個速查表包含有正則的絕大多數的規則

正規表達式速查表

4、正則中常用的方法

1、test( )

RegExp.text(str);

對指定的字元串執行一個正規表達式搜尋,傳回一個布爾值,如果比對成功傳回true,否則傳回false。

var reg=/\D/;

var str=”12,3456789”;

if(reg.test(str)){

document.write(“不全是數字”);

}else{

document.write(“全是數字”);

}

2、exec( )

RegExp.exec(str);

exec 查找并傳回目前的比對結果,并傳回一個長度為1的數組。如果沒有找到,則傳回null

傳回的數組還有三個屬性:

index 目前比對項的位置;

lastIndex 目前比對項結束的位置(index + 目前比對項的長度);

input 查找的字元串;

exec 方法受參數 g 的影響。若指定了 g,則下次調用 exec 時,會從上個比對的 lastIndex 開始查找。

var str = “1a1b1c”;

var reg = new RegExp(“1.”, “g”);

var arr = reg.exec(str);

var arr2 = reg.exec(str);

var arr3 = reg.exec(str);

var arr4 = reg.exec(str);

console.log(arr);

console.log(arr2);

console.log(arr3);

console.log(arr4);

3、search( )

實際上這是字元串中的方法,但是該方法需要傳入一個正則對象

str.search(RegExp);

該方法用于字元串的搜尋,會傳回比對項出現的位置

var reg=/d/;

var str=”abcdefg”;

console.log( str.search(reg) ); //3

var reg=/bcde/;

console.log( str.search(reg) ); //1

4、match( )

此方法如同search也是字元串中的一個方法,需要傳入一個正則對象

str.match(RegExp);

該方法作用如同exec,用于字元串比對,并傳回比對成功的數組,但是該方法如果指定了參數 g,那麼match 一次傳回所有的結果。

var str=”a0b123c453de5fg7897h”;

var reg=/\d/;

console.log( str.match(reg) ); //0

var reg=/\d/g;

console.log( str.match(reg) ); //0,1,2,3,4,5,3,5,7,8,9,7

5、replace( )

用于字元串替換,傳回替換後的字元串,這個方法是字元串的方法,隻在字元串中使用的話隻能進行單個字元的替換,但是當我們加上正則後,這個方法就有了很大的變化。

strObj.replace(RegExp,replacement);

replacement:規定替換文本或生成替換文本的函數(函數傳入的參數是比對到的子字元串,函數的傳回值是替換後的子字元串)。

var str=”Hello World”;

var reg=/World/;

str=str.replace(reg,”Javascript”);

document.write(str+”

”); //Hello Javascript

var name = ‘aaa bbb ccc’;

var reg=/\b\w+\b/g;

var uw=name.replace(reg, function(word){

return word.substring(0,1).toUpperCase()+word.substring(1);}

);

document.write(uw+”

”);//Aaa Bbb Ccc

正規表達式需要經常練習和使用,因為正規表達式的規則比較多,而且比較繁瑣,勤加練習才能逐漸掌握,通過寫這篇部落格,加深了自己對正規表達式的一些了解,也加強了對正規表達式規則的掌握程度。

繼續閱讀