要求
我们的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>
观察到链接标记也发生了变化。
那么,如何修改逻辑 -
这里有正则表达式吗?
我查了一些问题,比如Javascript Regex to replace URLs with links, but not in embed (or img) tags
答案 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}");