如何在Javascript中完全删除字符串中的URL?

17

我有一个字符串,其中可能包含多个URL链接(http或https)。 我需要一个脚本,可以完全从字符串中删除所有这些URL,并返回没有它们的同样字符串。

到目前为止,我尝试过:

 var url = "and I said http://fdsadfs.com/dasfsdadf/afsdasf.html";
 var protomatch = /(https?|ftp):\/\//; // NB: not '.*'
 var b = url.replace(protomatch, '');
 console.log(b);

但这只会删除 http 部分并保留链接。

如何编写正确的正则表达式以删除跟随 http 的所有内容,并在字符串中检测多个链接?

非常感谢!

2个回答

43

您可以使用这个正则表达式:

var b = url.replace(/(?:https?|ftp):\/\/[\n\S]+/g, '');
//=> and I said 

这个正则表达式匹配并删除任何以 http:// 或者 https:// 或者 ftp:// 开头的URL,并匹配到下一个空格字符或输入结束。 [\n\S]+ 也可以跨多行匹配。


1
你能否将其转换为多行正则表达式并解释每一行的作用,以改进你的答案? - George Stocker
1
@anubhava 从技术上讲不是因为\S排除了\n,所以你最好使用[\S\n]如果你想匹配多行。 - Downgoat
它是错误的,因为它无法删除类似www.domain.com这样的内容。 - gtzinos
1
URL必须以“http://”或“https://”或“ftp://”开头,否则此正则表达式不会将任何其他内容视为URL。 - anubhava

1

你是否搜索过URL解析器正则表达式?这个问题有几个全面的答案 获取URL的各个部分(正则表达式)

话虽如此,如果你想要更简单的东西(也许不是很完美),你应该记得捕获整个URL字符串,而不仅仅是协议。

类似于 /(https?|ftp):\/\/[\.[a-zA-Z0-9\/\-]+/ 应该会更好地工作。请注意,添加的一半解析协议之后的URL剩余部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接