正则表达式中的反向预搜索(下)

 更新时间:2009年12月14日 03:17:27   作者:  
在前面正则表达式中的反向预搜索中,在JavaScript中利用RegExp对象实现了正则表达式反向预搜索的字符串替换功能。

代码为:

复制代码 代码如下:

//程序目的,去掉图片路径中的域名
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 href="https://www.jb51.net">链接</a>';

程序运行后去掉的内容就是第二个域名即https://www.jb51.net。这是为什么呢?

仔细查看正则表达式会发现,在使用"(\<img) "匹配了<img之后,使用“.*”匹配所有字符直到“http://”或者“https://”。请注意,正是“.*”导致了这个问题的出现,这里的“.*”就是说,一直查找和匹配,尽可能的多匹配,直到最后一个限定符,也就是说术语中的贪婪(greedy)匹配。很自然,就想到了使用非贪婪的匹配解决这个问题。把正在表达式改为:
复制代码 代码如下:

//与贪婪匹配的差别就是多了一个问号“?”,贪婪".*",非贪婪".*?"
var reg1 = /(\<img)(.*?(?=(http|https)\:\/\/))((http|https)\:\/\/[^\/]*)/gim;

解决问题的方法很简单,但是也说明平时工作存在的一个重要问题:程序测试不充分。

相关文章

  • js正则表达式 匹配两个特定字符间的内容示例

    js正则表达式 匹配两个特定字符间的内容示例

    今天小编就为大家分享一篇js正则表达式 匹配两个特定字符间的内容示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 8个你应该了解的正则表达式提高你的工作效率

    8个你应该了解的正则表达式提高你的工作效率

    正则表达式也可以被当作是一门语言,入门时可能很吃力,不过一旦学会了就方便很多,在处理一些比较复杂的替换时,正则表达式就会发挥它的真正作用,本文整理了一些常用的正则,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-01-01
  • javascript中基于replace函数的正则表达式语法

    javascript中基于replace函数的正则表达式语法

    replace()最js中比较简单的字符替换函数,但是它也是可以跟正则结合实现强大的字符替换效果。
    2011-02-02
  • 正则表达式初运用之认证界面的实现代码

    正则表达式初运用之认证界面的实现代码

    这篇文章主要介绍了正则表达式初运用之认证界面的实现代码,代码简单易懂,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • linux下如何配置SQLSERVER ODBC

    linux下如何配置SQLSERVER ODBC

    这篇文章主要介绍了linux下如何配置SQLSERVER ODBC的相关资料,需要的朋友可以参考下
    2015-09-09
  • 关于.*匹配和.*?匹配的区别解析

    关于.*匹配和.*?匹配的区别解析

    这篇文章主要介绍了关于.*匹配和.*?匹配的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 常用正则表达式收集

    常用正则表达式收集

    这篇文章主要整理了ASP.NET的常用正则表达式,有需要的朋友可以收藏一下
    2015-09-09
  • JS使用正则去除字符串最后的逗号

    JS使用正则去除字符串最后的逗号

    字符串最后的逗号怎么去除,方法有很多,本文为大家介绍下使用JS正则去除字符串最后逗号,具体实现如下,感兴趣的朋友可以参考下
    2013-08-08
  • 正则表达式中^和$的含义与实例代码

    正则表达式中^和$的含义与实例代码

    ^从字符串开头进行匹配,$从字符串末尾进行匹配,下面这篇文章主要给大家详细介绍了关于正则表达式中^和$的含义与实例,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • JavaScript 正则表达式验证函数代码

    JavaScript 正则表达式验证函数代码

    上篇文章《JavaScript验证正则表达式大全》说的是javascript中使用的正则表达式的例子,但是没有说这些正则表达式如何使用,现在给大家几个例子,大家可以看看。
    2010-05-05

最新评论