Я использую следующее, чтобы забрать все https или ftp из большой строки
/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
Я хочу расширить функциональность, чтобы НЕ подобрать любой URL-адрес с предыдущим тегом src="
Матч: https://xxx.yyy.com
Нет совпадения: src="https://xxx.yyy.com
Я пробовал негативный внешний вид, пытаясь сопоставить src="
без успеха.
Регулярные выражения JavaScript не поддерживают lookbehinds.
Один из распространенных способов, которым вы могли бы сопоставлять такие строки:
[^"]https:\/\/[a-z.]+
Хотя вы должны написать более подробное регулярное выражение для домена, а затем просто пропустите первый символ, чтобы получить URL-адрес. Вы можете увидеть здесь демо-версию regex.
Lookbehinds не поддерживаются в JavaScript. Однако вы можете решить это, явно сопоставив 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);
"