JS正则表达式匹配URL,除非它是单引号或双引号

时间:2015-05-05 16:01:20

标签: regex

这匹配网址,以便我可以将它们链接起来:

(\b[a-zA-Z0-9-._+]@[a-zA-Z0-9.-]+[a-zA-Z0-9-]\b|\b([a-zA-Z]+:\/\/|[a-zA-Z]+:\/\/www\.|www\.)[a-zA-Z0-9.-]+[a-zA-Z0-9-]([:]*[0-9]*)(\/[-~+=%!:#@_a-zA-Z0-9.]*[-~+=:%!#_a-zA-Z0-9])*\/?(\/?\?[-+=&;:%@_.a-zA-Z0-9]*[-+=:&;%@_a-zA-Z0-9])?(#[-=_a-zA-Z0-9]+)?)

但我想避免匹配HTML中的网址,例如<img src="http://foo.com"/>

我的想法是更新正则表达式,以便如果URL被单引号或双引号包围,它就匹配。我认为这很好地涵盖了URL属于HTML属性的所有情况,因此不应该被删除。

如何在JS正则表达式中实现这一目标?

1 个答案:

答案 0 :(得分:0)

为此你需要使用负前瞻和后瞻断言,但对于js负向前瞻并不起作用。所以也许负面的背后断言就足够了。

我建议使用现有的模式(来自here),例如:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

然后稍加修改:\w(?!\"),这样网址就会以字母结尾,然后是不是双引号。

您可以在此处播放:https://regex101.com/r/hY8sZ8/1