@maksmaksimovich

Как написать такое регулярное выражение?

Нужна регулярка для поиска всех img, у которых в srс есть /test/ , как такое сделать?
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Не нужны здесь регулярные выражения:

const imgs = document.querySelectorAll('img[src*="/test/"]');

UPD. Оказывается, автор вопроса с первого раза не сумел рассказать, чего ему надо. Вынесено из комментариев:

это не в dom, а в строке

Всё равно регулярные выражения не нужны. Парсим строку, ищем нужные элементы, получаем их разметку:

const div = document.createElement('div');
div.innerHTML = str;
const imgsStr = ''.concat(...[].map.call(
  div.querySelectorAll('img[src*="/test/"]'),
  n => n.outerHTML
));

или

const imgsStr = Array
  .from(
    new DOMParser().parseFromString(str, 'text/html').querySelectorAll('img[src*="/test/"]'),
    n => n.outerHTML)
  .join('');

или

const imgsStr = Array.prototype.reduce.call(
  document.createRange().createContextualFragment(str).querySelectorAll('img[src*="/test/"]'),
  (acc, n) => acc + n.outerHTML,
  ''
);

UPD. Нет, со второго раза тоже не получилось. Всплыли ещё подробности:

мне нужно удалить из этой строки все картинки, которые...

Удалить, так удалить:

const div = document.createElement('div');
div.innerHTML = str;
const imgs = div.querySelectorAll('img[src*="/test/"]');
for (let i = 0; i < imgs.length; i++) {
  imgs[i].outerHTML = '';
}
str = div.innerHTML;

или

const { body } = new DOMParser().parseFromString(str, 'text/html');
body.querySelectorAll('img[src*="/test/"]').forEach(n => n.remove());
str = body.innerHTML;

или

const fragment = document.createRange().createContextualFragment(str);
for (const n of fragment.querySelectorAll('img[src*="/test/"]')) {
  n.parentNode.removeChild(n);
}
str = Array.from(fragment.childNodes, n => n.outerHTML || n.nodeValue).join('');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы