正則表達(dá)式的元字符是包含特殊含義的字符胞谈,它們有一些特殊的功能呜魄,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含義。
單個字符和數(shù)字
.
表示匹配除換行符外的單個字符笨蚁,兩個.
就表示匹配兩個字符
var pattern1=/g.gle/;
alert(pattern1.test('gogle'))//true
alert(pattern1.test('g\ngle'))//換行符false
alert(pattern1.test('ggle'))//沒有匹配false
var pattern2=/g..gle/;
alert(pattern2.test('google'))//true
alert(pattern2.test('gooogle'))//false-
[a-z0-9A-Z]
-
[a-z]
表示26個小寫字母任意一個都匹配
var pattern1=/[a-z]oogle/;
alert(pattern1.test('hoogle'))//true
alert(pattern1.test('google'))//true -
[A-Z]
表示26個大寫字母任意一個都匹配
var pattern1=/[A-Z]oogle/;
alert(pattern1.test('Aoogle'))//true
alert(pattern1.test('google'))//false -
[0-9]
表示0-9任意一個數(shù)字都匹配
var pattern1=/[0-9]oogle/;
alert(pattern1.test('000000oogle'))//true
alert(pattern1.test('google'))//flase -
[a-zA-Z0-9]
表示匹配任意字母與數(shù)字
var pattern1=/[a-zA-Z0-9]oogle/;
alert(pattern1.test('0oogle'))//true
alert(pattern1.test('google'))//true
alert(pattern1.test('Foogle'))//true
【結(jié)合重復(fù)字符使用】表示可以匹配任意多個字符
var pattern1=/[0-9]*oogle/;
alert(pattern1.test('oogle'))//true
alert(pattern1.test('00000google'))//true
-
[^a-z]
表示取非伪很,任意非小寫字母
var pattern1=/[^a-z]oogle/;
alert(pattern1.test('0oogle'))//true
alert(pattern1.test('google'))//flase
alert(pattern1.test('Foogle'))//true
當(dāng)然也可以是任意非大寫字母奋单,非數(shù)字,非~\w小寫
表示匹配字母數(shù)字及_
var pattern1=/[a-zA-Z0-9_]oogle/;//可以被后者取代
var pattern2=/\woogle/;
alert(pattern2.test('_oogle'))//true
alert(pattern2.test('.oogle'))//false\W大寫
是小寫的否定即呆盖,表示匹配任意非數(shù)字字母下劃線\d
匹配數(shù)字
var pattern1=/[0-9]oogle/;
var pattern2=/\doogle/;
alert(pattern2.test('2oogle'))//true
alert(pattern2.test('.oogle'))//false\D
大寫取非咯空白字符
\s
表示空白匹配
var pattern1=/goo\sgle/;
alert(pattern1.test('goo gle'))//true錨字符
^[]
放在中括號外面哦应又,表示限制中括號內(nèi)的內(nèi)容出現(xiàn)在字符串的開始,[]$
表示限制中括號的內(nèi)容尤筐,或緊鄰其的一個字符需要出現(xiàn)在字符串的結(jié)尾
var pattern1=/^google$/;
alert(pattern1.test('google'))//true
var pattern2=/^google/;
alert(pattern2.test('googleeeeee'))//true
var pattern3=/google$/;
alert(pattern3.test('gggggoogle'))//true
var pattern1=/^google[0-9]$/;
alert(pattern1.test('google7777'))//false
alert(pattern1.test('google7'))//true\b
表示是否達(dá)到邊界
var pattern1=/google\b/;
alert(pattern1.test('google'))//true
var pattern1=/google\b/;
alert(pattern1.test('googlee'))//flase重復(fù)字符
*
表示匹配0個或任意多個前面的字符
var pattern1=/gogle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//true+
表示匹配1個或多個+前面的字符
var pattern1=/go+gle/;
alert(pattern1.test('ggle'))//false
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//true盆繁?
表示匹配0個或一個旬蟋?前面的字符
var pattern1=/go?gle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//false
這個是表示對任意字符的重復(fù)限制咖为。
var pattern1=/g.?gle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gbgle'))//true{m,n}
匹配m~n個包括m與n個
var pattern1=/go{2,4}gle/;
alert(pattern1.test('gooooogle'))//false
alert(pattern1.test('google'))//true
表示只匹配限定個數(shù)個
var pattern1=/go{2}gle/;
alert(pattern1.test('gooooogle'))//false
alert(pattern1.test('google'))//true
表示至少匹配某個
var pattern1=/go{2,}gle/;
alert(pattern1.test('gooooogle'))//true
alert(pattern1.test('google'))//true()+匹配至少一個模式
var pattern1=/(google)+/;//對google這個字符串進(jìn)行重復(fù)匹配
alert(pattern1.test('googlegooglegoogle'))//true或字符
或模式匹配
var pattern1=/google|baidu|bing/;//或模式匹配
alert(pattern1.test('this is baidu'))//true
alert(pattern1.test('soso'))//false替代字符
var pattern1=/(.)\s(.)/;//替換
var str='google baidu';
alert(str.replace(pattern1,'$2 $1'));//baidu google
var pattern1=/8(.*)8/;//獲取88之間的任意字符
var str='this is 8google8';
document.write(str.replace(pattern1,'<strong>$1</strong>'))-
記錄字符
- 分組
var pattern1=/(google){2,4}/;//對google這個字符串進(jìn)行重復(fù)匹配
alert(pattern1.test('googlegooglegoogle'))//true
alert(pattern1.test('google'))//flase - 捕獲分組
var pattern1=/8(.*)8/;//獲取88之間的任意字符
alert(pattern1.test('this is 8google8'))//true
alert(RegExp.$1);//google表示獲取模式中第一個分組對應(yīng)的匹配的字符串躁染,必須得運行過。
- 分組
貪婪與惰性
-
貪婪模式
var pattern=/8(.*)8/;// 使用了貪婪我衬,匹配到了google8 8google8 8google
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>')) -
惰性模式
var pattern=/8(.?)8/g;//惰性模式挠羔,全部匹配
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'))
在后面多加一個埋嵌?表示取消貪婪模式,進(jìn)行惰性模式范舀,只進(jìn)行匹配一個了罪。
下面這個是沒有采用惰性模式,只是將匹配的結(jié)果中除去了8
var pattern=/8([^8]*)8/g;//惰性模式辅辩,全部匹配
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'))
捕獲與非捕獲
未添加分組時:.exec只返回當(dāng)前位置匹配的字符串
var pattern=/[a-z]\s\d{4}/;
var str='google 2015';
alert(pattern.exec(str));//google 2015
添加分組后玫锋,該分組內(nèi)容被捕獲,并賦給exec所返回的數(shù)組
var pattern=/([a-z])\s(\d{4})/;
var str='google 2015';
alert(pattern.exec(str));//google 2015,goole,2015
非捕獲即取消分組被捕獲(?:)
通過在分組前加上問號與冒號臀稚,便可以取消捕獲該分組三痰。
var pattern=/([a-z]*)\s(?:\d{4})/;
var str='google 2015';
alert(pattern.exec(str));//google 2015,goole分組嵌套
嵌套分組需要從外往內(nèi)獲取
var pattern=/(a?(b?(c?)))/;
var str='abc';
alert(pattern.exec(str));//abc,abc,bc,c
第一步:獲得匹配字符串:abc
第二步:獲得第一個分組,即最外層:abc
第三步:獲得第二個分組稚机,bc
第四步:獲得最內(nèi)層分組c使用前瞻捕獲
var pattern=/goo(?=gle)/;
var str='google';
alert(pattern.exec(str));//goo
在正則匹配的字符串之后添加一對()获搏,該括號內(nèi)定義了匹配條件常熙,只有當(dāng)滿足條件時,才可以進(jìn)行匹配仿贬。注意該例子的最后匹配值為goo墓贿。使用特殊字符匹配
var pattern=/[/;
var str='[';
alert(pattern.test(str));//true
對于要匹配特殊最的情況,需要在其前加上斜杠队伟,來標(biāo)識幽勒。-
換行模式
var pattern=/\d+/g;
var str='1啥容、abc\n2、edf';
alert(str.replace(pattern,'#'));//完全匹配,并替換var pattern=/^\d+/g; var str='1、abc\n2泼返、edf'; alert(str.replace(pattern,'#'));//匹配第一個 var pattern=/^\d+/gm; var str='1、abc\n2渠鸽、edf'; alert(str.replace(pattern,'#'));//完全匹配,并替換
當(dāng)字符串內(nèi)出現(xiàn)換行符時徽缚,如果我們不進(jìn)行錨字符的使用,那么會匹配全局排宰,包括換行后的那婉。
但是,由于使用錨字符盐类,導(dǎo)致即使使用了全局呛谜,也沒有辦法匹配換行后的結(jié)果隐岛,此時需要開啟換行。