js的正則表達式
語法極大地借鑑了另外一種腳本語言Perl的正則表達式
語法.
RegExp對象是js的一個內置對象,與String,Array相似。javascript
可經過構造函數RegExp()
建立。---當要根據用戶輸入來構造正則表達式時,必須採用構造函數方式。php
var re=new RegExp("\\b","gi");
須要注意的是\b這個特殊字符在js中表示退格,在正則表達式中特殊字符以前須要再加一個反斜槓,所以變成了\\b,正則表達式做爲參數傳給RegExp()構造函數,屬性字符g,i,m做爲構造函數的第二個參數.java
可經過字面量語法
建立,例:正則表達式
var re=/\d\d/;
其中斜槓(/)
表示正則表達式的開始和結束。告訴js,這是一個正則表達式,就像引號是字符串的開始和結束同樣的.數組
var patt=new RegExp(pattern,modifiers); 或者更簡單的方式: var patt=/pattern/modifiers;
modifiers(修飾符) 用於指定全局匹配、區分大小寫的匹配和多行匹配函數
全局匹配
,查找全部與模式匹配的子串,而不是在找到第一個匹配的字符後就中止不區分大小寫
。如:Paul與paul被看作相同的字符模式。正則表達式和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年。
還有其餘的方法能夠實現,這個我以爲相對簡便一些,具體的用法還要在實際項目中使用。