佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 正則表達式中的反向預搜索(下)

正則表達式中的反向預搜索(下)

熱門標簽:Linux服務器 服務器配置 銀行業(yè)務 電子圍欄 團購網(wǎng)站 Mysql連接數(shù)設置 阿里云 科大訊飛語音識別系統(tǒng)

代碼為:

復制代碼 代碼如下:

//程序目的,去掉圖片路徑中的域名
var str = 'img src="https://www.jb51.net/images/logo.gif">';
var reg1 = /(\img)(.*(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;
str.match(reg1);
alert(str.replace(RegExp.$4,'');

這個用法在字符串中只有一個URL時,是適用的,但是如果字符串中包含多個域名,例如:
復制代碼 代碼如下:

var str = 'img src="https://www.jb51.net/images/logo.gif">腳本之家首頁的a ;

程序運行后去掉的內(nèi)容就是第二個域名即https://www.jb51.net。這是為什么呢?

仔細查看正則表達式會發(fā)現(xiàn),在使用"(\img) "匹配了img之后,使用“.*”匹配所有字符直到“http://”或者“https://”。請注意,正是“.*”導致了這個問題的出現(xiàn),這里的“.*”就是說,一直查找和匹配,盡可能的多匹配,直到最后一個限定符,也就是說術(shù)語中的貪婪(greedy)匹配。很自然,就想到了使用非貪婪的匹配解決這個問題。把正在表達式改為:
復制代碼 代碼如下:

//與貪婪匹配的差別就是多了一個問號“?”,貪婪".*",非貪婪".*?"
var reg1 = /(\img)(.*?(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;

解決問題的方法很簡單,但是也說明平時工作存在的一個重要問題:程序測試不充分。

標簽:萍鄉(xiāng) 廣元 大理 衢州 棗莊 衡水 蚌埠 江蘇

巨人網(wǎng)絡通訊聲明:本文標題《正則表達式中的反向預搜索(下)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    北京市| 巨野县| 安平县| 凤阳县| 涡阳县| 兴和县| 丹寨县| 稻城县| 铅山县| 静宁县| 抚远县| 汕头市| 鄂托克旗| 泾川县| 五寨县| 淮南市| 老河口市| 长白| 商南县| 临西县| 宁安市| 鄱阳县| 平潭县| 金山区| 宁国市| 东光县| 苍溪县| 鹿邑县| 阜宁县| 大兴区| 噶尔县| 义乌市| 手游| 德州市| 红桥区| 蕲春县| 乌苏市| 淳安县| 浦城县| 诏安县| 松溪县|