1

试图用相同的词替换 HTML 页面中的某些词,但作为链接到该资源的 URL。例如,将单词“MySQL”替换为<a href="http://mysql.com">MySQL</a>

使用带有正则表达式的 JS 替换函数,它的替换效果很好。

但它也替换了已经是 URL 一部分的单词……这就是问题所在。

对于 MySQL 示例,它同时替换了已经链接的“MySQL”文本和指向 mysql.com 的 URL,因此破坏了已经存在的链接。

有没有办法更新内联正则表达式(在 .replace 调用中)以不在现有链接(即元素)中进行替换?

这是替换代码:

var NewHTML = OriginalHTML
.replace(/\bJavaScript\b/gi, "<a href=\"http://js.com/\">$&</a>")
.replace(/\bMySQL\b/gi, "<a href=\"http://www.mysql.com/\">$&</a>")
;

这是完整的示例代码(试图将其粘贴到内联,但反引号看起来不正确): http: //pastie.org/private/v4l2s2c42aqduqlopurpw

浏览了 JS 正则表达式参考(此处),并在正则表达式匹配中尝试了各种其他排列,如下所示,但所有这些都使它与页面上的任何单词都不匹配...... .replace(/\b(\<a\>*!\>)JavaScript\b/i,xxxxx

以下正则表达式确实会阻止匹配发生在单词实际上触及斜杠或破折号的任何地方......但这不是解决方案(并且它不能修复上面的 mysql 示例):

.replace(/\b(?!\>)(?!\-)(?!\/)MySQL\b(?!\-)(?!\/)/gi, "<a href=\"http://www.mysql.com/\">$&</a>")`

我已经阅读了 stackoverflow 和其他地方的相关线程,但似乎找不到这个特定的场景,无论如何都不是在 JavaScript 中。

任何帮助将不胜感激。:-)

谢谢!

4

2 回答 2

3

您可以更改您的正则表达式以排除结束锚标记之前的关键字,</a>

.replace(/\bMySQL\b(?![^<]*?<\/a>)/gi, "<a href=\"http://www.mysql.com/\">$&</a>")

例如,参见jsfiddle

于 2012-12-31T00:50:36.070 回答
1

负前瞻应该就足够了:

.replace(/\bMySQL(?!\.com)\b/gi, "<a href=\"http://www.mysql.com/\">$&</a>")
于 2012-12-31T00:46:27.987 回答