玩轉javascript RegExp對象

玩轉javascript RegExp對象

js中的正則表達式

js的正則表達式語法極大地借鑑了另外一種腳本語言Perl的正則表達式語法.
RegExp對象是js的一個內置對象,與String,Array相似。javascript

建立RegExp對象

  1. 可經過構造函數RegExp()建立。---當要根據用戶輸入來構造正則表達式時,必須採用構造函數方式。php

    var re=new RegExp("\\b","gi");

    須要注意的是\b這個特殊字符在js中表示退格,在正則表達式中特殊字符以前須要再加一個反斜槓,所以變成了\\b,正則表達式做爲參數傳給RegExp()構造函數,屬性字符g,i,m做爲構造函數的第二個參數.java

  2. 可經過字面量語法建立,例:正則表達式

    var re=/\d\d/;

    其中斜槓(/)表示正則表達式的開始和結束。告訴js,這是一個正則表達式,就像引號是字符串的開始和結束同樣的.數組

語法

var patt=new RegExp(pattern,modifiers);

或者更簡單的方式:

var patt=/pattern/modifiers;
  • pattern(模式) 描述了表達式的模式
  • modifiers(修飾符) 用於指定全局匹配、區分大小寫的匹配和多行匹配函數

    • G---全局匹配,查找全部與模式匹配的子串,而不是在找到第一個匹配的字符後就中止
    • I---模式不區分大小寫。如:Paul與paul被看作相同的字符模式。
    • m---多行標誌。制定特殊字符^和$能夠匹配多行文本和字符串的開始和結束

正則表達式和String對象的split()-返回數組,match-返回數組,search()-返回索引,在正則表達式中也只能找到第一個匹配的字符組,全局匹配對它無效,replace()-替換結合使用才能發揮它的強大功能。
具體的正則表達式特殊字符就不在此列舉了(太多了)。spa

簡單的實例

咱們就舉幾個簡單的例子瞭解一下正則表達式的功能實現
實例1. 要匹配1-800-888-5474的電話號碼,使用正則表達式:code

var a="1-800-888-5474";
var re=/\d-\d{3}-\d{3}-\d{4}/gi;
var b=a.match(re);
console.log("b:"+b);

後臺輸出b:1-800-888-5474,d{3}表示出現三個數字,{n}表示前一項出現n次,?表示前一項出現0次或1次對象

實例2.索引

var a="1997,1998,2000,2001,2002,2000,paul,paula,paulab,pau";    
    var b=a.match(/2000?1?2?/gi);
    var d=a.match(/paul?a?b?/gi);
    var e=a.replace(/2000?1?2?/gi,"2017")
    var f=a.replace(/paul?a?b?/gi,"room")    
    console.log("b:"+b);
    console.log("d:"+d);
    console.log("e:"+e);
    console.log("f:"+f);

輸出結果以下:
圖片描述

示例中,
b:輸出19世紀的年份組成的數組
d:輸出全部含有pau字符組成的數組
e:把字符串中的19世紀年份全替換爲2017年
f:把字符串中含有pau的字符串所有替換爲room.

實例3. 位置字符\b,\B的深刻理解

var a="hello world,I am a girl.";
    var re1=/\b/gi;
    var re2=/\B/gi;
    var b=a.replace(re1,"|");
    var c=a.replace(re2,"|");
    console.log("b:"+b);
    console.log("c:"+c);

結果以下:
圖片描述

能夠從結果中看出:\b的位置是在單詞的先後(單詞字符與非單詞字符之間的位置),\B的位置在單詞的先後,除卻了\b位置,剩餘的全部位置。

實例4. 正則表達式的分組
如何實現分組的,只須要將它們放在()中,正則表達式中的()是將字符模式組合起來的特殊字符,圓括號自己不是要匹配的字符。
如:

var s="javascript,vbscript and php";

要求用同一個正則表達式匹配javascript和vbscript.

var s="javascript,vbscript and php";
var re=/\b(vb|java)script\b/gi;
s=s.replace(re,"aa");
alter(s);

其中|,是分組裏面的特殊字符,和||(或)的含義是同樣的。

實例5:單引號替換雙引號

var re=/\B'|'\B/gi;

實例6:使用$引用分組

var a="2012,2013,2014"
//把a修改成"2012年,2013年,2014年"
var re=/(\d{4})/gi;
//就能夠在替換的字符中使用序號1的分組了:
a=a.replace(re,"$1年");
//輸出2012年,2013年,2014年。

還有其餘的方法能夠實現,這個我以爲相對簡便一些,具體的用法還要在實際項目中使用。

相關文章
相關標籤/搜索