正则表达式 - 匹配一些网址

时间:2017-06-21 14:40:46

标签: javascript regex

我使用以下内容从大字符串中获取所有https或ftp

/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;

我想扩展功能,以便不要选择任何前面有src="代码的网址

匹配度: https://xxx.yyy.com

不匹配: src="https://xxx.yyy.com

我尝试与src="匹配后的负面看法没有成功。

2 个答案:

答案 0 :(得分:1)

JavaScript正则表达式不支持 lookbehinds。

您可以匹配这样的字符串的一种常见方法是:

[^"]https:\/\/[a-z.]+

虽然您应该为域编写更详细的正则表达式,然后只需跳过第一个字符即可获取URL。你可以在这里看到https://stackoverflow.com/a/31223893/634824

答案 1 :(得分:0)

JavaScript不支持Lookbehinds。然而,您可以通过显式匹配可选组中的src="来解决此问题,然后过滤掉与匹配的组匹配的所有匹配项:



var input = `Match: https://match.xxx.yyy.com
     No Match: src="https://fail.xxx.yyy.com`;
var regex = /(src=")?\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/gim;
var urls = [];

// collect only matches without `src="` prefix
input.replace(regex, function(match, src) { if (!src) {urls.push(match)} });

console.log(urls);