Javascript http regex

Javascript http regex

本文关键字:regex http Javascript      更新时间:2023-09-26

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

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

这项工作很好。

然后,我使用正则表达式添加了另一个替换函数,将www替换为如下所示的http://www

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

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

几件事:

首先,你的第二个模式存在一些问题。 它不区分大小写(而第一种模式不区分大小写(,因此它不会捕获"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?