Javascript regex用链接替换一些单词,但不在现有的链接中

javascript regex replace some words with links, but not within existing links

本文关键字:链接 单词 regex 替换 Javascript      更新时间:2023-09-26

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

使用JS的replace函数与regex,它做的替换很好。

但它也取代了已经是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 regexp参考(这里),并尝试了各种其他的排列在regex匹配,像下面,但所有这一切都使它不匹配页面上的任何单词….replace(/'b('<a'>*!'>)JavaScript'b/i,xxxxx

下面的正则表达式确实防止匹配发生在单词字面上碰到斜杠或破折号的地方…但这不是解决方案(它并没有修复上面的mysql示例):

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

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

任何帮助都将非常感激。: -)

谢谢!

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

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

一个否定的前瞻应该足够了:

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