javascript正则表达式用链接替换一些单词,但不在现有链接中

时间:2012-12-31 00:35:05

标签: javascript regex replace

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

使用JS替换函数和正则表达式,它正在进行替换就好了。

但它也取代了已经属于网址的单词......这就是问题所在。

对于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 regexp引用(here),并在正则表达式匹配中尝试了各种其他排列,如下所示,但所有这一切使得它不匹配页面上的任何单词...     .replace(/\b(\<a\>*!\>)JavaScript\b/i,xxxxx

以下正则表达式可以防止匹配发生在任何字面上字面意义上的斜线或短划线......但这不是解决方案(并且它不能修复上面的mysql示例):

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

我已经阅读了stackoverflow和其他地方的相关主题,但似乎无法找到这个特定场景,而不是在JavaScript中。

非常感谢任何帮助。 :-)

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

例如,请参阅jsfiddle

答案 1 :(得分:1)

负向前瞻应该足够了:

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