1

我目前正在使用以下内容转换[url=][/url]为 html 链接:

s = message.replace(/\[url=([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='$1'>$2</a>")

那个工作很好。

然后我使用正则表达式添加了另一个替换函数来替换wwwhttp://www如下所示:

s = message.replace(/\[url=([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='$1'>$2</a>")
.replace(/www/g, "http://www");

这可能不是最好/有效的方法,也不支持https://目前不是优先事项但我想在某个时候包含的内容。有人可以告诉我我可以做些什么来改进正则表达式吗?

4

1 回答 1

1

几件事:

首先,您的第二种模式存在一些问题。它不区分大小写(而第一个模式是),因此它不会捕获诸如“WWW”之类的内容。也许这是可取的,也许不是。但它也是全局的,并且不固定在 URL 的开头。因此它将替换 URL 中任何位置的 www。将其更改为类似/href=\'www/然后将替换字符串更改为href='http://www应该可以解决这些问题。

其次,在这种情况下,使用 2 个正则表达式可能还不错。如果你愿意,你可以将它折叠成一个正则表达式,但这并不意味着它对计算机或碰巧正在阅读它的可怜的人来说更有效率。

综上所述,使用单个正则表达式完成此操作的一种方法是执行以下操作:

s = message.replace(/\[url=(?:http:\/\/)?([^\]]+)\]\s*(.*?)\s*\[\/url\]/gi, "<a href='http://$1'>$2</a>")

这可能会完成你想要的。但是,它不会关闭“www”,它只是将“http://”添加到任何尚未以该字符串开头的 URL 之前。正如您所提到的,它也不支持 https,但我不确定您将如何支持它。如果给你的只是一个没有协议的 URL,你如何确定是否将其设为 https?

于 2013-09-26T15:48:43.073 回答