Javascript仅为href值的锚标签添加前缀

时间:2014-04-28 07:06:40

标签: javascript regex

要求

我们的UI中有一个textarea,用户可以输入这样的值 -

<link attr="foo" attr2="bar" href='http://blah.com/style.css' rel='stylesheet' />
<a target="something" attr2 ="foobar" href="http://blah.com/test"></a>

我们希望使用javascript逻辑将{clickurl}添加到锚标记仅* 的href属性中。

目前我们有以下正则表达式 -

return bannerHtml.replace(/(href\s*=\s*[\"'])\s*/ig,"$1{clickurl}");

这会进行必要的更改,但它会对包含href属性的任何标记执行此操作,即不仅要锚定标记,还要链接其他标记,例如链接标记。因此,上面显示的示例输入变为 -

<link attr="foo" attr2="bar" href='{clickurl}http://blah.com/style.css' rel='stylesheet' />
<a target="something" attr2 ="foobar" href="{clickurl}http://blah.com/test"></a>

观察到链接标记也发生了变化。

那么,如何修改逻辑 -

  • 更改仅发生在锚标签上。
  • 它考虑了href属性之前任意数量属性的可能性。 (在示例输入中,在href属性之前有许多属性,如attr =&#34; foo&#34;等。)

这里有正则表达式吗?

我查了一些问题,比如Javascript Regex to replace URLs with links, but not in embed (or img) tags

2 个答案:

答案 0 :(得分:1)

为什么不使用这样的东西:

(<a.*?href\s*=\s*[\"'])\s*

这只会替换标签href。

return bannerHtml.replace(/(<a.*?href\s*=\s*[\"'])\s*/ig,"$1{clickurl}");

演示:http://regex101.com/r/eM7zU9

恕我直言,最好只使用getElementsByTagNames('a')并替换attr href(因为你想为所有锚点做这件事)

答案 1 :(得分:0)

要仅在<a代码中替换网址,同时确保我们位于<link代码之后,我建议您进行简单的替换:

return bannerHtml.replace(/(<link attr[^>]+>[^<]+<a[^>]+?href=")/img, "$1{clickurl}");