日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式汇总

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 一直以來,遇到正則表達式的時候,我更多的時候是在網上直接查找,通俗的說就是吃等食,等著直接吃別人嚼好的饃,最終的結果無疑就是誰嚼了誰才能真正吸收營養,以致于我每次再用到它時原本以為了如指掌卻終止于似曾相識。 所以,簡單做下歸納,增加一下理解。

在這里先貼出一篇參考資料:正則表達式30分鐘入門教程:https://deerchao.net/tutorials/regex/regex.htm

一.正則表達式基礎

1.概念:正則表達式描述了一種字符串匹配的模式,可以用來檢查一個串是否有某種子串,并將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。

2.正則表達式全部符號的解釋

3.屬性

? ?(1)global屬性:這個屬性指明在搜索字符串時是全局匹配還是只匹配第一個。

? ?(2)ignoreCase屬性:指明模式搜索是否區分大小寫。

4.向后引用

 應用正則表達式的時候,如果想在相鄰位置重復某個字符,我們通常使用下面例子這種方法:

var reg = /\d{2,4}/;//重復單個字符 var reg = /(\d[a-z]){2,4}/;//重復某個字符串

? 當要匹配的字符串不相鄰時,應該用后向引用。

說明:后向引用能夠實現歸功于正則表達式一個重要的特性,就是將匹配成功的模式的某部分進行存儲,供以后使用。也就是說,正則表達式能夠將子模式(也就是圓括號括起來的部分)存儲到一個臨時的緩沖區,并為它們從左到右按順序設置編號,這些編號從1開始,2,3,4,,,以此類推。當這些緩存區的子模式被后面引用時,就會重復搜索前面存儲的文本,所以后向引用實際上就是引用匹配的分組。對于有的時候,只想進行分組,而不想引用,則可以用"(?:exp)"的形式,既不匹配文本,也不引用編號。如:

var reg = /(\w{3})(?:\d+)([a-z]{2})\2/; var str = "man78abab"; console.log(reg.test(str));//true console.log(RegExp.$2);//ab

上面例子中:上面例子中\2匹配的不是78,而是ab就是因為第二個分組不匹配文本,也不引用編號,所以(\w{3})對應\1,([a-z]{2})對應\2;

注意1:正則對象中后向引用時只能通過\n這種方式實現,不能通過$n這種方式實現,在js中可以應用RegExp.$n這種方式查看子模塊的值,另一種使用$n的方式是:

例子1:
var
reg = /(\d+)=(\w+)/; var str = "777=hate"; console.log(str.replace(reg,'$2=$1'));//hate=777

例子2:
var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
console.log($0);//第一次是2013- 第二次是6-
console.log($1);//第一次是2013 第二次是6
console.log($2);//第一次是- 第二次是-
return $1 + '.'; //分別返回2013. 6.
});
console.log( str ); //2013.6.7

其他分組語法:

5.次序、貪婪和懶惰

如果有這樣一個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字符串,如果用它來搜索aabab的話,它會匹配整個字符串aabab,也就是說,默認情況下,正則表達式中包含能接受重復的量詞,它通常會匹配盡可能多的字符,這稱為貪婪匹配。如果想匹配盡可能少的字符,就要進行懶惰匹配,實現的方式,就是在表示次數的字符(如:* + ? {n,m} {n,})后面加 "?"。

一點說明:

var str = 'goooogle‘; var reg1 = /o+/; //"goooo" var reg2 = /o+?/; //"go"

改動之后:

var str = 'goooogle‘; var reg1 = /o+gle/; //"oooogle" var reg2 = /o+?gle/; //"oooogle"

后面的例子中,/o+?gle/沒有匹配到"ogle",是因為正則表達式中總是從左往右進行匹配,不會從右邊獲取子串進行匹配。

雖然上述結果相同,但是匹配的實現過程不同,在reg1中,首先o+會匹配所有的"o",然后接著匹配"gle",從而完成整體匹配。而在reg2中,o+?會先匹配一個"o",然后gle在字符串的第2位到第4位(即原串的"ooo")匹配失敗。進而回溯至o+?去匹配第二個"o",成功后再在第3位到第4位匹配"gle",以此類推……最后匹配到整個字符串。

從優先級來說,從左往右的次序匹配 > 貪婪 / 懶惰匹配。

6.位置指定

接下來的四個用于查找在某些內容(但并不包括這些內容)之前或之后的東西,也就是說它們用于指定一個位置,就像\b,^,$那樣,因此它們也被稱為零寬斷言。例如:

(?=exp)也叫零寬先行斷言,它匹配文本中的某些位置,這些位置的后面能匹配給定的后綴exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.時,它會匹配sing和danc。

(?<=exp)也叫零寬后行斷言,它匹配文本中的某些位置,這些位置的前面能給定的前綴匹配exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的后半部分(除了re以外的部分),例如在查找reading a book時,它匹配ading。

負向位置指定

零寬負向先行斷言(?!exp),只會匹配后綴exp不存在的位置。\d{3}(?!\d)匹配三位數字,而且這三位數字的后面不能是數字。

同理,我們可以用(?<!exp),零寬負向后行斷言來查找前綴exp不存在的位置:(?<![a-z])\d{7}匹配前面不是小寫字母的七位數字(實驗時發現錯誤?注意你的“區分大小寫”先項是否選中)。

7.方法,區別、聯系、返回值、作用對象

(1).regObj.test(strObj);
用途:用于測試字符串參數中是否存在表達式模式,返回值:boolean
(2).regObj.exec(strObj);
用途:方法用于正則表達式模式在字符串中運行查找,如果找到了匹配文本,就返回一個結果數值,否則,返回null;
(3).strObj.search(regObj);
用途:在字符串中搜索符合正則的內容,搜索到就返回出現的位置(位置從0開始計算,如果匹配到多個,只會返回第一個的位置),搜索失敗返回-1;
(4).strObj.match(regObj);
用途:在字符串中搜索符合規則的內容,搜索成功就返回內容,當全局匹配時:格式為數組,失敗就返回null;不是全局匹配時,只匹配第一個就會停止;
(5).strObj.replace(regObj,新的字符串/回調函數); 說明:第一個參數指的是每次匹配成功的字符。
用途:查找符合正則的字符串,找到了就替換成對應的字符串,然后返回替換后的內容。

轉載于:https://www.cnblogs.com/shineLh/p/6895512.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的正则表达式汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。