【发布时间】:2017-09-29 00:17:36
【问题描述】:
我正在尝试实现我发现here 的正则表达式。我想找到任何http、https 或网络a tags,然后将 target="blank" 添加到它们。因此,代码如下所示:
const urlRegex = /(((https?:\/\/)|(www\.))[^\s]+)/g;
return this.node.body.replace(urlRegex, function(url) {
return `${url}" target="blank">`;
})
如果我收到这样的文字:
<p>
<a href='www.norden.org'>Nordens</a>
</p>
<p>
<figure>
<img src='http://tornado-node.net/wp-content/uploads/2017/08/Ove-Hansen.jpg' alt=' Styreleder Ove Hansen. Foto: Arne Walderhaug' />
<figcaption>Ove Hansen, styreleder i Norden</figcaption>
</figure>
</p>
<p>
<a href='http://norden.org/documents.html'>norden.org</a>
</p>
这是上述函数的结果:
<p>
<a href='<a href=\"www.norden.org'>Nordens</a>
</p>
<p>
<figure>
<img\" target=\"blank\"> src='<a href=\"http://tornado-node.net/wp-content/uploads/2017/08/Ove-Hansen.jpg'\" target=\"blank\"> alt=' Styreleder Leif-Ove Hansen. Foto: Arne Walderhaug' />
<figcaption>Ove Hansen, styreleder i Norden</figcaption>
</figure>
</p>
<p>
<a href='<a href=\"http://norden.org/documents.html'>norden.org</a></p>\" target=\"blank\">"
实现这个的正确方法是什么?
更新
我也在尝试在这样的文本中查找 href:
let str = this.node.body;
const regex = /(href=\')([^\']*)(\')/g;
if (str.match(regex)) {
for(let i = 0; i < str.match(regex).length; i++) {
let url = str.match(regex)[i] + ' target="_blank"';
}
}
这给了我一个包含匹配 href 的字符串的数组,但我在其中添加了 target="_blank",但是我现在如何用我正在检查的文本中替换它?
【问题讨论】:
-
它是带下划线的“_blank”,这显然不是您的问题的解决方案:)
-
另外,寻找没有锚标签的“http”和“https”有什么意义?没有它,添加目标就没有意义。
-
你为什么使用正则表达式。您可以轻松使用 jquery
标签: javascript regex