正則表達(dá)式中的反向預(yù)搜索(下)
更新時(shí)間:2009年12月14日 03:17:27 作者:
在前面正則表達(dá)式中的反向預(yù)搜索中,在JavaScript中利用RegExp對(duì)象實(shí)現(xiàn)了正則表達(dá)式反向預(yù)搜索的字符串替換功能。
代碼為:
復(fù)制代碼 代碼如下:
//程序目的,去掉圖片路徑中的域名
var str = '<img src="http://www.dbjr.com.cn/images/logo.gif">';
var reg1 = /(\<img)(.*(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;
str.match(reg1);
alert(str.replace(RegExp.$4,'');
這個(gè)用法在字符串中只有一個(gè)URL時(shí),是適用的,但是如果字符串中包含多個(gè)域名,例如:
復(fù)制代碼 代碼如下:
var str = '<img src="http://www.dbjr.com.cn/images/logo.gif">腳本之家首頁的<a href="http://www.dbjr.com.cn">鏈接</a>';
程序運(yùn)行后去掉的內(nèi)容就是第二個(gè)域名即http://www.dbjr.com.cn。這是為什么呢?
仔細(xì)查看正則表達(dá)式會(huì)發(fā)現(xiàn),在使用"(\<img) "匹配了<img之后,使用“.*”匹配所有字符直到“http://”或者“https://”。請(qǐng)注意,正是“.*”導(dǎo)致了這個(gè)問題的出現(xiàn),這里的“.*”就是說,一直查找和匹配,盡可能的多匹配,直到最后一個(gè)限定符,也就是說術(shù)語中的貪婪(greedy)匹配。很自然,就想到了使用非貪婪的匹配解決這個(gè)問題。把正在表達(dá)式改為:
復(fù)制代碼 代碼如下:
//與貪婪匹配的差別就是多了一個(gè)問號(hào)“?”,貪婪".*",非貪婪".*?"
var reg1 = /(\<img)(.*?(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;
解決問題的方法很簡(jiǎn)單,但是也說明平時(shí)工作存在的一個(gè)重要問題:程序測(cè)試不充分。
相關(guān)文章
正則表達(dá)式替換字符串并保留其中部分任意內(nèi)容(最新推薦)
我們都知道可以用正則表達(dá)式,即regex,來進(jìn)行字符串的匹配,替換,今天小編給大家分享如何用正則表達(dá)式替換字符串并保留其中部分任意內(nèi)容,感興趣的朋友跟隨小編一起看看吧2023-04-04使用正則表達(dá)式替換報(bào)表名稱中的特殊字符(推薦)
正則表達(dá)式,又稱規(guī)則表達(dá)式。這篇文章給大家介紹了使用正則表達(dá)式替換報(bào)表名稱中的特殊字符,及Java正則表達(dá)式替換所有特殊字符的方法,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11javascript 獲取url參數(shù)的正則表達(dá)式(用來獲取某個(gè)參數(shù)值)
javascript 傳多個(gè)參數(shù)的正則表達(dá)式(用來獲取某個(gè)參數(shù)值) ,腳本之家之前發(fā)布通過函數(shù)獲取url參數(shù)的代碼不是正則表達(dá)式。2010-01-01JavaScript正則表達(dá)式驗(yàn)證身份證號(hào)碼是否合法(兩種方法)
正則表達(dá)式(regular expression)是一個(gè)描述字符模式的對(duì)象。下面通過本篇文章給大家介紹js正則表達(dá)式驗(yàn)證身份證號(hào)碼是否合法,需要的朋友可以參考下本篇文章2015-09-09正則表達(dá)式驗(yàn)證用戶名、密碼、手機(jī)號(hào)碼、身份證(推薦)
這篇文章主要介紹了正則表達(dá)式驗(yàn)證用戶名、密碼、手機(jī)號(hào)碼、身份證,需要的朋友可以參考下2017-06-06