【发布时间】:2014-01-30 00:03:05
【问题描述】:
我想使用 JavaScript 为文本中的 URL 找到防弹正则表达式(我正在用 <a> 标签替换 URL),我当前是正则表达式:
var url_re = /https?:\/\/(?:(?!&[^;]+;)[^\s:"'<>)])+/g;
它正在工作,但与端口不匹配的 url(如http://localhost:8080)。这个正则表达式会匹配所有的网址还是我也错过了什么?
var url_re = /https?:\/\/[^\/\s"'<>]+\/?(?:(?!&[^;]+;)[^\s:"'<>)])+/g;
或者也许有更短/更好的 url 正则表达式。
【问题讨论】:
-
哦,正则表达式和通用 URL,这比看起来要难方式:mathiasbynens.be/demo/url-regex
-
你的第一个正则表达式:
/https?:\/\/(?:(?!&[^;]+;)[^\s:"'<>)])+/g匹配http://localhost:8080 -
我在这里找到了一个应该可以工作的正则表达式。 stackoverflow.com/a/6322319
-
看起来你对自己太苛刻了。 . .您不只是在寻找 URL,而是在寻找 有效 URL。简短而甜蜜的是使用
var url_re = /https?:\/\/[^\s"']+/g;(或类似的东西,基于您期望的输入),并假设初始http(s)://之后的有效字符形成一个合法的URL。除非有充分的理由将http://test.com放在链接中并将http://test,com保留为常规文本,否则我认为您正在尝试解决的问题超出了您的需要。您到底想将此代码用于什么目的? -
@anubhava 试试
'asdasd http://localhost:8080 asdasd'.replace(url_re, function(url) { return '[' + url + ']'; })
标签: javascript regex url