正则表达式用于查找所有文本URL但不在图像src中

时间:2013-05-19 12:14:33

标签: javascript regex regex-negation

我正在将页面上的所有文字网址替换为可点击。
当我这样做时,它也会替换'src'属性中的链接 图像(不合需要)

我的正则表达式是这个

[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?

我尝试使用

进行否定搜索
(?!src\=\")[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?

但它不符合一件事。

我应该如何在我的正则表达式之前?

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样......

(?:(href="))([-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?)(?:([^>]*>[^<]*</a>))

我在开头和结尾添加了非捕获组,以验证它是一个锚点href。我在http://regexpal.com/

上使用此页面的来源对其进行了测试

答案 1 :(得分:1)

我不确定这个问题,但我的解释是你想要替换 A 元素中 href 属性的值。

此正则表达式将找到具有href属性的A元素。该值将位于第一个捕获组中。

(?:<a[^>]*?href\s*=\s*")([^"]*)(?:")

这是一个捕获匹配的所有三个部分并使用替换功能的版本

myHtml.replace(/(<a[^>]*?href\s*=\s*")([^"]*)(")/gi, function(match, $1, $2, $3) {
    return $1 + "javascript.void(functionName('" + $2 + "'))" + $3;
});

如果myHtml包含以下内容:

<a target="new" title="test" href="http://url.com">

它会转换成这个:

<a target="new" title="test" href="javascript.void(functionName('http://url.com'))">

您还提到了可点击的内容。

myHtml.replace(/(<a[^>]*?)(href\s*=\s*"([^"]*)")/gi, function(match, $1, $2, $3) {
    return $1 + "onclick=\"functionName('" + $3 + "')\"";
});

结果:

<a target="new" onclick="functionName('http://url.com')">

顺便说一句,我用自己的正则表达式工具测试了这个:http://rey.gimenez.biz