我使用以下内容从大字符串中获取所有https或ftp
/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
我想扩展功能,以便不要选择任何前面有src="
代码的网址
匹配度:
https://xxx.yyy.com
不匹配:
src="https://xxx.yyy.com
我尝试与src="
匹配后的负面看法没有成功。
答案 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);