1

我正在将页面上的所有文本网址替换为可点击的。
当我这样做时,它还会替换图像的“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@:%_\+.~#?&//=]*)?

但它不匹配的东西。

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

4

2 回答 2

1

像这样的东西怎么样...

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

我在开头和结尾添加了非捕获组,以验证它是一个锚 href。我在http://regexpal.com/使用此页面的源代码对其进行了测试

于 2013-05-24T20:17:52.857 回答
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

于 2013-06-19T17:32:31.717 回答