国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS正則表達式學習之貪婪和非貪婪模式實例總結

2019-11-19 18:16:18
字體:
來源:轉載
供稿:網友

本文實例總結了JS正則表達式貪婪和非貪婪模式。分享給大家供大家參考,具體如下:

首先上一段js代碼:

<script>try{ str="<p>abcdefg</p><p>abcdefghijkl</p>"; re1=str.match(/<p>[/W/w]+?<//p>/ig); alert("非貪婪模式:/r/n/r/n1:"+re1[0]+"/r/n2:"+re1[1]); re1=str.match(/<p>[/W/w]+<//p>/ig); alert("貪婪模式:/r/n/r/n"+re1); re1=str.match(/<p>(.+?)<//p>/i); alert("非貪婪模式,且不要標記:/r/n/r/n1:"+re1[1]); re1=str.match(/<p>(.+)<//p>/i); alert("貪婪模式,且不要標記:/r/n/r/n"+re1[1]);}catch(e){ alert(e.description)}</script>

下邊給出一些例子:

貪婪模式:

在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。比如,針對文本 "dxxxdxxxd",舉例如下:

貪婪模式:

表達式 匹配結果
(d)(/w+) "/w+" 將匹配第一個 "d" 之后的所有字符 "xxxdxxxd"
(d)(/w+)(d) "/w+" 將匹配第一個 "d" 和最后一個 "d" 之間的所有字符 "xxxdxxx"。
雖然 "/w+" 也能夠匹配上最后一個 "d",但是為了使整個表達式匹配成功,
"/w+" 可以 "讓出" 它本來能夠匹配的最后一個 "d"
 

由此可見,"/w+" 在匹配的時候,總是盡可能多的匹配符合它規則的字符。
雖然第二個舉例中,它沒有匹配最后一個 "d",但那也是為了讓整個表達式能夠匹配成功。
同理,帶 "*" 和 "{m,n}" 的表達式都是盡可能地多匹配,帶 "?" 的表達式在可匹配可不匹配的時候,
也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 。

非貪婪模式:

在修飾匹配次數的特殊符號后再加上一個 "?" 號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。舉例如下,針對文本 "dxxxdxxxd" 舉例:

表達式 匹配結果
(d)(/w+?) "/w+?" 將盡可能少的匹配第一個 "d" 之后的字符,
結果是:"/w+?" 只匹配了一個 "x"
(d)(/w+?)(d) 為了讓整個表達式匹配成功,"/w+?" 不得不匹配 "xxx" 才可以讓后邊的 "d" 匹配,
從而使整個表達式匹配成功。因此,結果是:"/w+?" 匹配 "xxx"

更多的情況,舉例如下:

舉例1:表達式 "<td>(.*)</td>" 與字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配時,匹配的結果是:成功;匹配到的內容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整個字符串, 表達式中的 "</td>" 將與字符串中最后一個 "</td>" 匹配。

舉例2:相比之下,表達式 "<td>(.*?)</td>" 匹配舉例1中同樣的字符串時,將只得到 "<td><p>aa</p></td>", 再次匹配下一個時,可以得到第二個 "<td><p>bb</p></td>"。

PS:這里再為大家提供2款非常方便的正則表達式工具供大家參考使用:

JavaScript正則表達式在線測試工具:
http://tools.VeVB.COm/regex/javascript

正則表達式在線生成工具:
http://tools.VeVB.COm/regex/create_reg

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript正則表達式技巧大全》、《JavaScript替換操作技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript中json操作技巧總結》、《JavaScript錯誤與調試技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭市| 朝阳市| 柘荣县| 南城县| 项城市| 乌鲁木齐县| 东丽区| 获嘉县| 双鸭山市| 金堂县| 玛沁县| 蓬安县| 盐边县| 北宁市| 和田市| 滕州市| 山阴县| 丹巴县| 翁牛特旗| 永安市| 周宁县| 蓬安县| 舟曲县| 宜兴市| 通渭县| 平谷区| 淳安县| 五莲县| 宿松县| 霞浦县| 稻城县| 阿荣旗| 长顺县| 昌黎县| 徐闻县| 洛扎县| 肃南| 峨山| 峨山| 老河口市| 永德县|