Javascript 正則表示式 RegExp
阿新 • • 發佈:2019-02-03
其實正則表示式核心部分就是:有窮自動機(DFA或NFA),學過編譯原理的應該比較清楚。
正則表示式:reg
字串:str
reg.exec(str); 等同 str.match(reg);,且返回一個數組。
下面是檢視一些資料總結(有刪減),也用來提示自己:
*表示0次或者多次,等同於{0,}
+表示一次或者多次,等同於{1,}
?表示0次或者1次,等同於{0,1}
1、貪心模式
只要在合法的情況下,它們會盡量多去匹配字元。
例:reg = /c{3,4}/;
str='ccccTest';
str.match(reg);//"cccc"
能匹配四個的時候,正則絕對不會去匹配三個。
2、非貪心模式
如果我們希望正則儘量少地匹配字元,可以在表示數字的符號後面加上一個?。
組成如下的形式:
{n,}?, *?, +?, ??, {m,n}?
注意:貪心、非貪心模式,是在模式匹配之後再做判斷的(我的理解)。
3、/^開頭,結尾$/
4、點‘.’
‘.’會匹配字串中除了換行符\n之外的所有字元
5、正則表示式中的或,“|“
例:reg = /^b|c.+/;
str='bbs.blueidea.com';
//匹配開頭的b或者是c.+
6、括號
正則表示式內括號裡寫的內容會被認為是子正則表示式,所匹配的結果也會被記錄下來供後面使用。
例:reg = /^(b|c).+(c|b)/;
str='bssssssscddddd';
str.match(reg);//return
["bsssssssc", "b", "c"]
不記錄子正則表示式的匹配結果
使用形如(?:pattern)的正則就可以避免儲存括號內的匹配結果。
例:reg = /^(?:b|c).+/;
str='bbs.blueidea.com';
str.match(reg);//return
["bbs.blueidea.com"]
正向預查
(1)形式:(?=pattern)
要匹配的字串,後面必須緊跟著pattern!
例:reg = /cainiao(?=8)/;
str='cainiao8';
str.match(reg);//return
["cainiao"]
需要注意的是,括號裡的內容並不參與真正的匹配,只是檢查一下後面的字元是否符合要求而已,例如上面的正則,返回的是cainiao,而不是cainiao8。
(2)形式(?!pattern)和?=恰好相反,要求字串的後面不能緊跟著某個pattern
7、字元集合[abc]
[abc]表示a或者b或者c中的任意一個字元。
[a-z],[A-Z],[0-9],分別表示小寫字母,大寫字母,數字。
例:reg = /^[a-zA-Z][a-zA-Z0-9_]+/;
8、反字元集合[^abc]
^在正則表示式開始部分的時候表示開頭的意思,例如/^c/表示開頭是c;
但是在字符集和中,它表示的是類似“非“的意思
9、邊界與非邊界
\b表示的邊界的意思,也就是說,只有字串的開頭和結尾才算數。例如/\bc/就表示字串開始的c或者是結尾的c。
與\b對應\B表示非邊界。
10、數字與非數字
\d表示數字的意思,相反,\D表示非數字
11、空白
直接量字元:
\f匹配換頁符
\n匹配換行符
\r匹配回車
\t匹配製表符(Tab鍵)
\v匹配垂直製表符。
注意:以上5種字元只需要在字串中使用一個斜杆,例:str="test\nbbs";
\s匹配單個空格,等同於[\f\n\r\t\v]。
12、單詞字元
\w表示單詞字元,等同於字元集合[a-zA-Z0-9_]
\W表示非單詞字元,等效於[^a-zA-Z0-9_] //不要看少了下劃線
13、反向引用 這個挺好用
形式如下:/(子正則表示式)\1/
例1:reg = /(\w)\1/;
str='blueidea';
str.match(reg); //return
null。
這裡的“\1”就叫做反向引用,它表示的是第一個括號內的字正則表示式匹配的內容。在上面的例子中,第一個括號裡的(\w)匹配了b,因此“\1”就同樣表示b了,在餘下的字串裡自然找不到b了。
例2:reg = /(\w)(\w)\2\1/;
str='woow';
str.match(reg); //return ["woow"]
14、匹配元字元
則表示式中都有一定的特殊含義,類似這些有特殊功能的字元都叫做元字元。
例:reg = /c\*/;
str='c*';
str.match(reg); //return
["c*"]
15、正則表示式的修飾符
(1)全域性匹配,修飾符g(匹配所有的子模式)
如果正則表示式沒有設定g,那麼exec方法不會對正則表示式有任何的影響,如果設定了g,那麼exec執行之後會更新正則表示式的lastIndex屬性,表示本次匹配後,所匹配字串的下一個字元的索引,下一次再用這個正則表示式匹配字串的時候就會從上次的lastIndex屬性開始匹配。
例:var reg = /b/g;
var str
='bs.ssblueidea.com';
var c = reg.exec(str);
//c.index=0;
var d = reg.exec(str);
//d.index=5;
(2)不區分大小寫,修飾符i
形式:/pattern/i
(3)行首行尾,修飾符m
形式:/pattern/m
m修飾符的作用是修改^和$在正則表示式中的作用,讓它們分別表示行首和行尾。
例:var reg = /^b/m;
var str =
'test\nbbs';
匹配到b,因為加了m修飾符之後,^已經表示行首,由於bbs在字串第二行的行首,所以可以成功地匹配。
對於正則表示式,有很多應用
例:
替換字串str中a或A為B
var str
="luafengAaA";
var result =
str.replace(/a/gi,"B");
alert(result);//"luBfengBaB"
RegExp方法
test:僅僅檢查是否能夠匹配str,並且返回布林值以表示是否成功。
exec:檢查是否能夠匹配str,並且返回匹配值。
String方法
match:與正則表示式的exec方法類似,該方法同樣返回一個類似陣列的物件。
replace:形式:str. replace
(reg,’new str’);
它的作用是將str字串中匹配reg的部分用’’new
str”部分程式碼,值得注意的是原字串並不會被修改,而是作為返回值被返回。
例 :var reg =
/(\w+)\s(\w+)/;
var str = 'one two';
var newStr =
str.replace(reg,'$2 $1');
//結果為:two
one,也就是空格前後的單詞被調換順序了。
注意:由於在替換文本里$有了特殊的含義,所以我們如果想要是用$這個字元的話,需要寫成$$。
search:返回正則表示式第一次匹配的位置
split:分割返回陣列