成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 編寫高質(zhì)量的js之正確理解正則表達(dá)式回溯

編寫高質(zhì)量的js之正確理解正則表達(dá)式回溯

熱門標(biāo)簽:菏澤智能ai電銷機(jī)器人銷售公司 鄂州人工智能電銷機(jī)器人軟件 線上教育ai外呼系統(tǒng) css百度地圖標(biāo)注位置顯示 地圖標(biāo)注商戶中心要收錢多少 宿遷智能外呼系統(tǒng)供應(yīng)商 地圖標(biāo)注字母的軟件 400免費(fèi)電話去哪申請 實(shí)用地圖標(biāo)注app

當(dāng)一個(gè)正則表達(dá)式掃描目標(biāo)字符串時(shí),從左到右逐個(gè)掃描正則表達(dá)式的組成部分,在每個(gè)位置上測試能不能找到一個(gè)匹配。對于每一個(gè)量詞和分支,都必須確定如何繼續(xù)進(jìn)行。如果是一個(gè)量詞(如*、+?或者{2,}),那么正則表達(dá)式必須確定何時(shí)嘗試匹配更多的字符;如果遇到分支(通過|操作符),那么正則表達(dá)式必須從這些選項(xiàng)中選擇一個(gè)進(jìn)行嘗試。

當(dāng)正則表達(dá)式做出這樣的決定時(shí),如果有必要,它會記住另一個(gè)選項(xiàng),以備返回后使用。如果所選方案匹配成功,正則表達(dá)式將繼續(xù)掃描正則表達(dá)式模板,如果其余部分匹配也成功了,那么匹配就結(jié)束了。但是,如果所選擇的方案未能發(fā)現(xiàn)相應(yīng)匹配,或者后來的匹配也失敗了,正則表達(dá)式將回溯到最后一個(gè)決策點(diǎn),然后在剩余的選項(xiàng)中選擇一個(gè)。繼續(xù)這樣,直到找到一個(gè)匹配,或者量詞和分支選項(xiàng)的所有可能的排列組合都嘗試失敗后放棄這一過程,然后移動到此過程開始位置的下一個(gè)字符上,重復(fù)此過程。

例如,下面的代碼演示了這一過程是如何通過回溯處理分支的。

/h(ello|appy) hippo/.test("hello there, happy hippo");

上面一行正則表達(dá)式用于匹配“hello hippo”或“happy hippo”。測試一開始要查找一個(gè)h,目標(biāo)字符串的第一個(gè)字母恰好就是h,立刻就找到了。接下來,子表達(dá)式(ello|appy)提供了兩個(gè)處理選項(xiàng)。正則表達(dá)式選擇最左邊的選項(xiàng)(分支選擇總是從左到右進(jìn)行),檢查ello 是否匹配字符串的下一個(gè)字符,確實(shí)匹配,然后正則表達(dá)式又匹配了后面的空格。

然而,在接下來的匹配中正則表達(dá)式“走進(jìn)了死胡同”,因?yàn)閔ippo 中的h 不能匹配字符串中的下一個(gè)字母t。此時(shí)正則表達(dá)式還不能放棄,因?yàn)樗€沒有嘗試過所有的選擇,隨后它回溯到最后一個(gè)檢查點(diǎn)(在匹配了首字母h 之后的那個(gè)位置上)并嘗試匹配第二個(gè)分支選項(xiàng)。但由于匹配沒有成功,而且也沒有更多的選項(xiàng)了,正則表達(dá)式認(rèn)為從字符串的第一個(gè)字符開始匹配是不能成功的,因此它從第二個(gè)字符開始重新進(jìn)行查找。正則表達(dá)式?jīng)]有找到h,繼續(xù)向后找,直到第14 個(gè)字母才找到,它匹配happy 的那個(gè)h。隨后正則表達(dá)式再次進(jìn)入分支過程,這次ello 未能匹配,但在回溯之后的第二次分支中,它匹配了整個(gè)字符串“happy hippo”,匹配成功了。

再如,下面代碼演示了帶重復(fù)量詞的回溯。

var str = "p>Para 1./p>" +"img src='smiley.jpg'>" +"p>Para 2./p>" +"div>Div./div>";
/p>.*\/p>/i.test(str);

正則表達(dá)式先匹配了字符串開始的3個(gè)字母p>,然后是.*。點(diǎn)號表示匹配除換行符以外的任意字符,星號這個(gè)“貪婪”量詞表示重復(fù)零次或多次,匹配盡量多的次數(shù)。因?yàn)槟繕?biāo)字符串中沒有換行符,正則表達(dá)式將匹配剩下的全部字符串!不過由于正則表達(dá)式模板中還有更多內(nèi)容需要匹配,所以正則表達(dá)式嘗試匹配。由于在字符串末尾匹配不成功,因此每次回溯一個(gè)字符,繼續(xù)嘗試匹配,直到正則表達(dá)式回到/div>標(biāo)簽的位置。接下來嘗試匹配\/(轉(zhuǎn)義反斜杠),匹配成功,然后匹配p,匹配不成功。正則表達(dá)式繼續(xù)回溯,重復(fù)此過程,直到第二段末尾時(shí)終于匹配了/p>。匹配返回成功需要從第一段頭部一直掃描到最后一個(gè)的末尾,這可能不是我們想要的結(jié)果。

將正則表達(dá)式中的“貪婪”量詞*改為“懶惰”(又名“非貪婪”)量詞*?,以匹配單個(gè)段落。“懶惰”量詞的回溯工作以相反方式進(jìn)行。當(dāng)正則表達(dá)式/p>.*?\/p>/推進(jìn)到.*?時(shí),首先嘗試全部跳過,然后繼續(xù)匹配\/p>。

這樣做是因?yàn)??匹配零次或多次,盡可能少重復(fù),盡可能少意味著可以重復(fù)零次。但是,當(dāng)隨后的在字符串的這一點(diǎn)上匹配失敗時(shí),正則表達(dá)式回溯并嘗試下一個(gè)最小的字符數(shù):1個(gè)。正則表達(dá)式繼續(xù)像這樣向前回溯到第一段的末尾,在那里量詞后面的\/p>得到完全匹配。

如果目標(biāo)字符串只有一個(gè)段落,那么此正則表達(dá)式的“貪婪”版本和“懶惰”版本是等價(jià)的,但嘗試匹配的過程不同。

當(dāng)一個(gè)正則表達(dá)式占用瀏覽器幾秒甚至更長時(shí)間時(shí),問題原因很可能是回溯失控。為說明此問題,給出下面的正則表達(dá)式,它的目標(biāo)是匹配整個(gè)HTML文件。此表達(dá)式被拆分成多行是為了適合頁面顯示。與其他正則表達(dá)式不同,JavaScript在沒有選項(xiàng)時(shí)可使點(diǎn)號匹配任意字符,包括換行符,所以此例中以[\s\S]匹配任意字符。

/html>[\s\S]*?head>[\s\S]*?title>[\s\S]*?\/title>[\s\S]*?\/head>
[\s\S]*?body>[\s\S]*?\/body>[\s\S]*?\/html>/

此正則表達(dá)式匹配在正常HTML 字符串時(shí)工作良好,但當(dāng)目標(biāo)字符串缺少一個(gè)或多個(gè)標(biāo)簽時(shí),就會變得十分糟糕。例如/html>標(biāo)簽缺失,最后一個(gè)[\s\S]*?將擴(kuò)展到字符串的末尾,因?yàn)樵谀抢餂]有發(fā)現(xiàn)/html>標(biāo)簽,然后正則表達(dá)式將查看此前的[\s\S]*?隊(duì)列記錄的回溯位置,使它們進(jìn)一步擴(kuò)大。正則表達(dá)式嘗試擴(kuò)展倒數(shù)第二個(gè)[\s\S]*?—用它匹配/body>標(biāo)簽,就是此前匹配過正則表達(dá)式模板\/body>的那個(gè)標(biāo)簽,然后繼續(xù)查找第二個(gè)/body>標(biāo)簽,直到字符串的末尾。當(dāng)所有這些步驟都失敗時(shí),倒數(shù)第三個(gè)[\s\S]*?將被擴(kuò)展,直至字符串的末尾,依此類推。

此類問題的解決辦法在于盡可能具體地指出分隔符之間的字符匹配形式,如模板“.*?”用于匹配雙引號包圍的一個(gè)字符串。用更具體的[^"\rn]*取代過于寬泛的.*?就去除了回溯時(shí)可能發(fā)生的幾種情況,如嘗試用點(diǎn)號匹配引號,或者擴(kuò)展搜索超出預(yù)期范圍。

在HTML 的例子中解決辦法不是那么簡單。不能使用否定字符類型,如用[^]替代[\s\S],因?yàn)樵谒阉鬟^程中可能會遇到其他類型的標(biāo)簽。但是,可以通過重復(fù)一個(gè)非捕獲組來達(dá)到同樣效果,它包含一個(gè)回溯(阻塞下一個(gè)所需的標(biāo)簽)和[\s\S](任意字符)元序列。這樣可以確保中間位置上查找的每個(gè)標(biāo)簽都會失敗。然后,更重要的是,[\s\S]模板在回溯過程中阻塞的標(biāo)簽在被發(fā)現(xiàn)之前不能被擴(kuò)展。應(yīng)用此方法后對正則表達(dá)式的最終修改如下:

/html>(?:(?!head>)[\s\S])*head>(?:(?!title>)[\s\S])*title>

(?:(?!\/title>)[\s\S])*\/title>(?:(?!\/head>)[\s\S])*\/head>

(?:(?!body>)[\s\S])*body>(?:(?!\/body>)[\s\S])*\/body>
(?:(?!\/html>)[\s\S])*\/html>/

雖然這樣做消除了潛在的回溯失控,并允許正則表達(dá)式在匹配不完整HTML字符串失敗時(shí)的使用時(shí)間與文本長度呈線性關(guān)系,但是正則表達(dá)式的效率并沒有提高。像這樣為每個(gè)匹配字符進(jìn)行多次前瞻,缺乏效率,而且成功匹配過程也相當(dāng)慢。匹配較短字符串時(shí)使用此方法相當(dāng)不錯(cuò),而匹配一個(gè)HTML 文件可能需要前瞻并測試上千次。

您可能感興趣的文章:
  • 正則中的回溯定義與用法分析【JS與java實(shí)現(xiàn)】
  • javascript遞歸回溯法解八皇后問題
  • 最佳的JavaScript錯(cuò)誤處理實(shí)踐
  • Javascript模塊化編程(一)模塊的寫法最佳實(shí)踐
  • 5個(gè)最佳的Javascript日期處理類庫分享
  • JS trim去空格的最佳實(shí)踐
  • 通過百度地圖獲取公交線路的站點(diǎn)坐標(biāo)的js代碼
  • js回溯法計(jì)算最佳旅行線路代碼實(shí)例

標(biāo)簽:綿陽 三亞 梅州 咸陽 恩施 池州 鞍山 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《編寫高質(zhì)量的js之正確理解正則表達(dá)式回溯》,本文關(guān)鍵詞  編寫,高質(zhì)量,的,之,正確理解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《編寫高質(zhì)量的js之正確理解正則表達(dá)式回溯》相關(guān)的同類信息!
  • 本頁收集關(guān)于編寫高質(zhì)量的js之正確理解正則表達(dá)式回溯的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日韩精品一区二区三区第95| 欧美体内she精高潮| 久久亚洲美女| 国产精品久久久久久久久久妞妞| 国产一级片免费看| 麻豆明星ai换脸视频| 日韩视频中午一区| 亚洲一区 在线播放| 免费看成人a| wwww亚洲| 日韩一区二区免费在线观看| 国产精品免费麻豆入口| 成人网av.com/| 成人免费毛片app| 91美女片黄在线观看91美女| 亚洲综合极品香蕉久久网| 日韩中文在线播放| 国产原创一区二区三区| 中文字幕在线视频网| 国产福利一区二区三区在线观看| 色婷婷国产精品综合在线观看| 黄色片在线免费| 日本一二三区视频在线| xxxxx日韩| 高清欧美性猛交| 91网在线看| 国产精品自拍视频| 69国产精品视频免费观看| va天堂va亚洲va影视| 成人免费看片载| 影音先锋2020资源| 黄网址在线播放免费| 国产高清精品软男同| 亚洲人成伊人成综合网久久久| 欧美a∨亚洲欧美亚洲| 精品国产麻豆免费人成网站| 91蝌蚪视频九色| 免费白浆视频| 在线播放 亚洲| 欧美成年黄网站色视频| 国产日产高清欧美一区二区三区| 国产日韩欧美精品一区| 国产精品白丝喷水在线观看| 婷婷久久综合九色国产成人| 欧美成人精品三级网站| 色伊人久久综合中文字幕| 亚洲一区二区三区在线免费观看| 国产喷水吹潮视频www| 91蝌蚪91九色| 国产色产综合产在线视频| 亚洲一区二区三区日本久久九| 亚洲精品久久久蜜桃动漫| 一女三黑人理论片在线| 欧美蜜桃一区二区三区| 久久久久国产成人精品亚洲午夜| 99re6在线| 你懂的视频在线播放| 五月天福利视频| 97精品人妻一区二区三区| 国产精品视频一区二区免费不卡| 欧美日韩三级一区| 亚洲精品鲁一鲁一区二区三区| 天堂中文字幕av| 国产精品自拍亚洲| 国产一区一区| 任你操精品视频| 91福利在线观看| 久久久久九九九九| 国内精品嫩模av私拍在线观看| 中文字幕欧美一区二区| 国产无遮挡又黄又爽免费网站| 你懂的在线看| 乱亲女秽乱长久久久| 成人在线黄色电影| 日韩av电影天堂| 国产另类在线| 中文字幕成人动漫| 亚洲美女少妇无套啪啪呻吟| 国产精品美女久久久久久久久| 亚洲欧洲成视频免费观看| 日韩免费黄色片| 国产精品久久久久久久天堂| 欧美videos大乳护士334| 精品午夜电影| 性欧美精品高清| 91精品久久久久久久| 亚洲精品喷潮一区二区三区| 欧美69精品久久久久久不卡| 国产人与禽zoz0性伦| 亚洲一区导航| 久操视频在线| 在线观看欧美亚洲| 天天av天天翘天天综合网| 欧美三级日本三级| 精品无码久久久久成人漫画| 都市激情久久综合| 亚洲丁香婷深爱综合| 黄色国产小视频| 悠悠资源网亚洲青| a级片在线免费看| 国产精品乱码一区二区三区| 国产日韩欧美精品在线| 黄色在线视频网站| 国产乱子伦视频一区二区三区| 四虎精品永久在线| 国产伦精品一区| 日本fc2在线观看| 性xxxx丰满孕妇xxxx另类| 北条麻妃一区二区三区| 黄色动漫在线| 激情综合网站| 免费看日本毛片| 日本精品一区| √最新版天堂资源网在线| www.九色.com| 在线观看不卡av| 91社区国产高清| 波多野结衣绝顶大高潮| 草草视频在线一区二区| 午夜亚洲福利| 影音先锋在线一区| 亚洲视频在线免费看| 国产aaa精品| 国产三级精品在线观看| 99热播在线观看| 欧美精品一区二区免费| 精品国产91久久久久久浪潮蜜月| 亚洲精品第一国产综合野草社区| 天堂资源最新版在线视频观看免费网| 久久久久久久久久久久久久国产| 色综合亚洲欧洲| 在线成人av网站| 黑人狂躁日本妞一区二区三区| 日韩av一区二区三区四区| 黄在线观看免费网站ktv| 久久精品视频中文字幕| 午夜在线a亚洲v天堂网2018| 夜夜春成人影院| av电影在线不卡| 免费毛片b在线观看| 亚洲天堂日韩av| 一区av在线播放| 欧美jizzhd精品欧美巨大免费| 成人盗摄视频| 亚洲欧美中文日韩在线| 影音先锋国产在线资源| 一区二区三区电影大全| 日韩精品久久久毛片一区二区| 欧美另类极品videosbest视| www.免费av| 九九九九精品九九九九| 亚洲风情亚aⅴ在线发布| 裸体武打性艳史| 亚洲精品网站在线观看| www视频在线观看com| 亚洲丁香婷深爱综合| 国产免费人做人爱午夜视频| 亚洲欧美日韩一区二区三区在线| 国产大陆精品国产| 精品无码在线视频| 精品国产一区av| 比比资源先锋| 久久精品国产精品亚洲红杏| 国产精品高潮呻吟久久久久| 被灌满精子的波多野结衣| 久久精品久久久久久| 手机在线色视频| 国产青青在线视频| 99久久久精品免费观看国产| 色婷婷综合在线| 91精品国自产| 欧美日韩视频在线一区二区观看视频| p色视频免费在线观看| 国产精品久久久精品四季影院| 久久高清国产| 日本一区二区免费看| 国产成人77亚洲精品www| www.天天干.com| 久久九九全国免费精品观看| 伊人久久大香线蕉综合影院首页| 亚洲高清久久| 亚洲理论电影| 成人av免费在线看| 国产精品亚洲一区二区在线观看| 在线观看91精品国产入口| 秋霞成人影院| 超碰91在线播放| 国产成人av免费在线观看| 性欧美videossex精品| 国产成人精品123区免费视频| 国产无套精品一区二区三区| 日产欧产美韩系列久久99| 丁香婷婷综合五月| 日韩精品一区二区三区四| 亚洲国内在线| 91在线短视频| 亚洲欧美色综合| 国产成人亚洲综合a∨婷婷图片| 黄页网站大全一区二区| 欧美激情福利视频在线观看免费| 精品网站999| 少妇高清精品毛片在线视频| 亚洲欧美综合另类在线卡通| 精品免费久久久| 国内精品视频一区二区三区| 伊人久久婷婷| 天天噜天天色| 亚洲日本三级| 欧美 激情 在线| 看亚洲a级一级毛片| 久久99国产乱子伦精品免费| 日韩电影二区| 精品国产影院| 欧美α欧美αv大片| 日本熟伦人妇xxxx| 久久久久国产成人精品亚洲午夜| 国产一区二区日韩精品欧美精品| 亚洲高清在线免费观看| 亚洲 欧美 日韩系列| 亚洲一区二区影院| 久久免费精品国产| 欧美精品一区二区三区精品| 亚洲精品小视频| 色哟哟无码精品一区二区三区| 美女视频黄是免费| 天堂视频在线免费观看| 人妻精品久久久久中文字幕69| 91黄色激情网站| 制服丝袜中文字幕亚洲| 日韩精品视频在线观看一区二区三区| 午夜成人免费电影| 91看片在线播放| av在线不卡网| 久草视频观看| 美女视频一区免费观看| 国产在线天堂www网在线观看| 亚洲欧美日韩不卡一区二区三区| 亚洲国产人成综合网站| 久久精品—区二区三区舞蹈| 亚洲国产精品久久久男人的天堂| 黄色三级中文字幕| 日本一区二区视频在线观看| 欧美v国产在线一区二区三区| 国产综合色产在线精品| 在线播放av中文字幕| 欧美性猛片xxxxx免费中国| 精品久久久网站| 性欧美video视频另类| 蜜桃精品视频在线观看| 亚洲色图偷窥| 白浆在线视频| 人操人爱免费视频| 精品综合在线| 3atv一区二区三区| av一区二区三| 日产精品高清视频免费| 日韩一级毛片| 深夜福利在线观看直播| 国产精品毛片aⅴ一区二区三区| 91精品国产高清自在线| 亚洲熟女乱色一区二区三区| 久久99国产精品久久久久久久久| 欧美精品久久一区二区| 天天摸天天操天天爽| 国产成人精品一区二三区四区五区| 农村妇女精品一二区| 精品少妇人欧美激情在线观看| 欧美超级免费视 在线| 国产一区香蕉久久| 成人观看网址| 久久久久se| 2020国产精品| 2018狠狠干| 91丨九色porny丨蝌蚪| 中文字幕精品www乱入免费视频| 777777777亚洲妇女| 欧美激情极品视频| 国产精品精品国产| 日韩高清在线不卡| 久久精品国产亚洲高清剧情介绍| 91麻豆精品视频| 中日韩视频在线观看| 中文字幕日韩高清在线| 国产免费999| 91香蕉在线观看| 色阁综合伊人av| 性欧美暴力猛交另类hd| 国模精品系列视频| 成年网站在线视频网站| 九九九久久国产免费| 欧美国产精品专区| 日本精品免费视频| 日韩一区二区三区电影| 一级黄色免费在线观看| 在线亚洲伦理| 久久色.com| 亚洲无人区码一码二码三码| 美女三级福利视频| 激情五月综合| 精品成人a区在线观看| 亚洲毛片aa| 欧美成人性福生活免费看| 黄色高清视频| 亚洲一区二区三区欧美| 91午夜精品| 亚洲 中文字幕 日韩 无码| 蜜桃在线视频| 久久精品男人的天堂| 热门国产精品亚洲第一区在线| 欧美一级艳片视频免费观看| 91精品在线一区二区| 99久久精品国产麻豆演员表| 国产三区在线成人av| 男女视频网站在线观看| 中文字幕在线观看成人| 中文字幕欧美一区二区| 欧美性xxxx极品hd欧美风情| 黑人与娇小精品av专区| 亚洲一二三四在线观看| 国产精品国产馆在线真实露脸| 公侵犯人妻一区二区三区| 亚洲va久久久噜噜噜久久| 欧美日韩在线观看免费| 男人午夜视频| 亚洲乱码国产乱码精品精可以看| 人妻va精品va欧美va| 免费观看在线午夜影视| 老司机在线精品视频|