这匹配网址,以便我可以将它们链接起来:
(\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正则表达式中实现这一目标?
答案 0 :(得分:0)
为此你需要使用负前瞻和后瞻断言,但对于js负向前瞻并不起作用。所以也许负面的背后断言就足够了。
我建议使用现有的模式(来自here),例如:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
然后稍加修改:\w(?!\")
,这样网址就会以字母结尾,然后是不是双引号。
您可以在此处播放:https://regex101.com/r/hY8sZ8/1