regex - сопоставить несколько URL

1

Я использую следующее, чтобы забрать все https или ftp из большой строки

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

Я хочу расширить функциональность, чтобы НЕ подобрать любой URL-адрес с предыдущим тегом src="

Матч: https://xxx.yyy.com

Нет совпадения: src="https://xxx.yyy.com

Я пробовал негативный внешний вид, пытаясь сопоставить src=" без успеха.

Теги:

2 ответа

1

Регулярные выражения JavaScript не поддерживают lookbehinds.

Один из распространенных способов, которым вы могли бы сопоставлять такие строки:

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

Хотя вы должны написать более подробное регулярное выражение для домена, а затем просто пропустите первый символ, чтобы получить URL-адрес. Вы можете увидеть здесь демо-версию regex.

  • 0
    нет матча без запуска "
  • 0
    Ты прав. Благодарю. Я отредактировал свой ответ.
Показать ещё 4 комментария
0

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню