2014-05-09 61 views
6

我有一个可能包含多个url链接(http或https)的字符串。我需要一个脚本,它将完全从字符串中删除所有这些URL,并在没有它们的情况下返回相同的字符串。如何从Javascript中完全删除字符串的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后面的所有内容,并检测字符串中的多个链接?

非常感谢!

回答

19

你可以使用这个表达式:

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

此正则表达式匹配,并删除与http://https://ftp://开始,并匹配了下一个空格字符的输入结束的任何URL。 [\n\S]+也将跨多行匹配。

+1

您可以通过将其转换为多行正则表达式并解释每行代码的含义来改善您的答案吗? –

+1

@anubhava从技术上讲,并不是因为'\ S'排除'\ n',所以你最好使用。 '[\ S \ n]'如果你想匹配多行 – Downgoat

+0

非常感谢@vihan,我已经更新了答案。 – anubhava

1

您是否搜索url解析器正则表达式?这个问题有几个全面的答案Getting parts of a URL (Regex)

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

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

相关问题