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

首頁 > 編程 > regex > 正文

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

2020-01-20 22:19:28
字體:
來源:轉載
供稿:網友

代碼為:

復制代碼 代碼如下:

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

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

var str = '<img src="http://m.survivalescaperooms.com/images/logo.gif">武林網首頁的<a href="http://m.survivalescaperooms.com">鏈接</a>';

程序運行后去掉的內容就是第二個域名即//m.survivalescaperooms.com。這是為什么呢?

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民勤县| 吉安市| 乡宁县| 颍上县| 武鸣县| 峡江县| 吉林省| 定陶县| 彰化县| 秦皇岛市| 台南县| 普定县| 伽师县| 建阳市| 商都县| 正宁县| 铜川市| 道孚县| 广饶县| 松桃| 内乡县| 武城县| 土默特左旗| 通州市| 灵山县| 乐都县| 辉县市| 遂川县| 航空| 双江| 张家港市| 筠连县| 博客| 娱乐| 肥乡县| 西宁市| 丰县| 汽车| 宕昌县| 仪陇县| 塔城市|