js正則及常用方法函式總結

2021-09-07 18:43:54 字數 4608 閱讀 2730

正規表示式作為一種匹配處理字串的利器在很多語言中都得到了廣泛實現和應用,web開發本質上是處理字串(服務端接受請求處理後拼接字串作為響應,這在早期的cgi程式設計中最明顯,然後客戶端解析字串進行渲染和執行),所以說,js作為一門常用於web開發的語言,必然要具備正則這種強大的特性,本文將對js中的正則用法及常用函式進行一番總結。

1.正則物件及其屬性

首先正則物件是js中內建的乙個物件,好比array以及math一樣,不需要第三方庫的支援,通常我們採取兩種方式來定義乙個正則物件

1)建構函式方式

var  reg=new regexp('abc','gi');
這裡,第乙個引數是正則的內容,第二個引數是修飾符,修飾符通常有三種,i,g,m,i表示的含義是忽略大小寫進行匹配,g表示全域性匹配即匹配到第乙個之後不停止繼續匹配,m表示多行匹配即遇到換行後不停止匹配繼續直到被匹配字串結束。

2)字面量方式

var  reg=/abc/gi;
兩個斜槓之間的是定義的正則內容,最後乙個斜槓之後的是修飾符,這種方式比第一種簡單高效,所以通常使用第二種方式來定義正則。

其次,正則作為js中的乙個內建物件,它必然有一些屬性和方法,如下:

2.屬性

在控制台中列印乙個正則物件如下:

可以看到它擁有global屬性,該屬性為布林型別,用來表示該正則是否是全域性匹配,ignorecase屬性,布林型別,用來指示是否忽略大小寫,lastindex為number型別,用來表示上次匹配成功的位置,multiline,布林型別,用來表示是否是多行匹配,source,string型別,用來表示正則的內容。

3.方法

通常對於乙個正則物件來講,我們能夠使用的方法基本上有三個,即regobj.test,regobj.exec及regobj.compile

1)test方法,該方法用來測試某個字串是否與正則匹配,匹配就返回true,否則返回false。

該方法接受乙個字串作為引數

**:

var reg=/boy(s)?\s+and\s+girl(s)?/gi;

console.log(reg.test('boy and girl'));

結果在控制台上列印出了true。該方法也是最常用的乙個方法。

2)compile方法

該方法的作用是能夠對正規表示式進行編譯,被編譯過的正則在使用的時候效率會更高,適合於對乙個正則多次呼叫的情況下,如果對乙個正則只使用一兩次,那麼該方法沒有特別顯著的效應。

接受的引數也是乙個正則。

**:

var reg=/[abc]/gi;

console.log(reg.test('a'));

reg=/[cde]/gi;

console.log(reg.test('a'));

reg.compile(reg);

console.log(reg.test('a'));

結果:

被編譯的正則和沒有編譯的正則在測試結果上沒有任何區別,只是多次呼叫的效率上會更高一些。

3)exec方法

該方法屬於乙個比較複雜的方法,它接受乙個字串,返回的是乙個陣列,陣列中第0個元素是匹配的子字串,第二個元素是正則中的第乙個子分組匹配的結果(如果有子分組,即正則中存在用圓括號括起來的分組),第三個是正則中第二個子分組匹配的結果(如果有第二個子分組)...以此類推,如果沒有正則子分組,那麼該陣列長度僅僅為1,就是匹配到的那個子字串。同時,返回的這個陣列同時還是乙個物件,它擁有兩個屬性,分別為index表示當前匹配到的子字串所處的位置,input屬性表示被匹配的原始字串。最後,該方法中的正則物件如果不是全域性匹配,即沒有g修飾符,則每次呼叫只會從字串開頭處匹配第乙個結果,且每次呼叫結果都是一樣的。只有指定為全域性匹配,才能夠按照從左往右依次去匹配,每次呼叫匹配乙個結果,正則物件的lastindex屬性前進到本次匹配的末尾位置,下回再呼叫的時候,會從lastindex處開始匹配而不是從頭匹配。

全域性匹配**:

var reg=/(\w)l(\w)/g;

var str="hello world hello 123 hello programmer hello test";

var arr=reg.exec(str);

while

(arr)

結果如下:

非全域性匹配**:

var reg=/(\w)l(\w)/;

var str="hello world hello 123 hello programmer hello test";

var arr=reg.exec(str);

var i=0;

while

(arr)

else

}

這裡為了防止無限輸出,只輸出前5個結果,如下:

這個時候每次呼叫的結果都一樣,lastindex根本沒有發生變化。

1)search方法

該方法是string物件的乙個方法,用來查詢第一次匹配的子字串的位置,如果找到就返回乙個number型別的index值,否則返回-1,它返回的只是第一次匹配的位置。

它接受乙個正則或者子字串為引數,這裡我們只討論正則的情況。

**:

var str="hello world";

console.log(str.search(/o/g));

輸出結果為4,可以看到儘管具有多個匹配結果而且也宣告為全域性匹配,但是還是返回的是第乙個匹配到的子串的位置;

2)replace方法

該方法用來將字串中的某些子串替換為需要的內容,接受兩個引數,第乙個引數可以為正則或者子字串,表示匹配需要被替換的內容,第二個引數為被替換的新的子字串。如果宣告為全域性匹配則會替換所有結果,否則只替換第乙個匹配到的結果。

**如下:

var str="hello world,hello test";

console.log(str.replace(/hello/g,'hi'));

結果為hi world,hi test

如果將上面**中的g修飾符去掉,則返回的結果是hi world,hello test

3)split方法

該方法主要用來將乙個字串拆分成乙個陣列,它接受乙個正則或者子字元(串)作為引數,返回乙個陣列,簡單情況下,我們不需要使用正則,只有在字串拆分規則不統一的情況下才需要使用正則,如下:

var str="how|old*are    you";

var arr=str.split(/\||\*|\s+/);

console.log(arr);

這裡需要將str拆分為單詞陣列,由於每個單詞之間存在不一樣的分隔符,我們採取正則來匹配,結果如下:

4)match方法

該方法接受乙個正則作為引數,用來匹配乙個字串,它的輸出結果在不是全域性匹配的情況下和exec方法的結果一致即乙個陣列並帶有額外的屬性,如果採用全域性匹配,則不返回任何和其被匹配字串相關的資訊,只返回匹配的結果。

非全域性匹配**:

var reg2=/(\w)s(\w)/;

var str2="ws1esr";

var result=str2.match(reg2);

var i=0;

while

(result)

else

}

結果如下:

非全域性匹配下,結果和exec非全域性匹配方法返回的完全一致,

全域性匹配**:

var reg3=/(\w)s(\w)/g;

var str4="ws1estqsa";

console.dir(str4.match(reg3));

結果如下:

可以看到,在全域性匹配下的時候,它不同於exec方法,它會一次性將所有匹配結果以陣列形式返回,且這個陣列沒有其他屬性用來指向被匹配字串的資訊,而exec方法在全域性匹配下每次返回的依然是本次匹配的結果陣列,且這個陣列中只包含本次匹配資訊,同時又擁有指向被匹配字串的資訊,即match方法在全域性匹配下一次性返回了所有匹配結果,而exec在全域性匹配下返回的依然是當次匹配結果。

js 正則常用函式

正規表示式中,需要轉義的字元 let reg d g let str ad 23 dfww 454 6 1.reg.test str true 如果字串中存在正規表示式的匹配結果則返回true否則返回false 2.str.match reg 23 454 6 將符合正則匹配的所有結果,以陣列的形式...

常用js方法總結

方法 描述charat 返回在指定位置的字元。charcodeat 返回在指定的位置的字元的 unicode 編碼。concat 連線字串。indexof 檢索字串。match 找到乙個或多個正規表示式的匹配。replace 替換與正規表示式匹配的子串。search 檢索與正規表示式相匹配的值。sl...

正則常用的方法總結

正則物件常用的方法 一 test方法 檢測某個字串是否匹配,有的話返回true,沒有的話返回false。接受乙個字串作為引數。二exec方法 接受的是字串,返回的結果是陣列。這個陣列是乙個物件,該方法中的正則物件如果不是全域性匹配,即沒有g修飾符,則每次呼叫只會從字串開頭處匹配第乙個結果,且每次呼叫...