Получение строки из regex () не ведет себя должным образом - PullRequest
1 голос
/ 31 января 2020

В настоящее время я работаю над проектом, в котором мне нужно сопоставить указанные теги c html и заменить их другими.

Я использую Javascript, чтобы сделать это, и код выглядит так:

// html to update
html = '<div class="page-embed"><article><iframe src="https://alink" width="100%"></iframe></article></div>';

// regex that will match the specific "<div class="page-embed">...<iframe src="https://alink"></iframe>...</div>
 const regexIframeInsideDiv = /<\s*div\s*class="page-embed"[^>]*>.*?<\s*iframe[^>]*\s*src="(.*?)"\s*><\s*\/\s*iframe\s*>.*?<\s*\/\s*div\s*>/g;

html = html.replace(regexIframeInsideDiv, (_match, src) => {
      console.log(src);
      return `<oembed>${src}</oembed>`;
});

Я использую инструмент (), чтобы получить то, что находится внутри атрибута источника, следующим образом:

src="(.*?)"

Вот проблема:

Если я запускаю код, консоль будет записывать:

https://alink" width="100%

, где она должна записывать:

https://alink

Возможно, я что-то упустил, например escape-строку или ошибку что-то еще ... но я не знаю, что.

Вот ожидаемое поведение: https://regexr.com/4tbj6

Спасибо!

Ответы [ 2 ]

1 голос
/ 31 января 2020

В вашем регулярном выражении, для части, которую вы соответствуете sr c, это не \s*, а \s.*

src="(.*?)"\s.*>

// html to update
html = '<div class="page-embed"><article><iframe src="https://alink" width="100%"></iframe></article></div>';

// regex that will match the specific "<div class="page-embed">...<iframe src="https://alink"></iframe>...</div>
const regexIframeInsideDiv = /<\s*div\s*class="page-embed"[^>]*>.*?<\s*iframe[^>]*\s*src="(.*?)"\s.*><\s*\/\s*iframe\s*>.*?<\s*\/\s*div\s*>/g;

html = html.replace(regexIframeInsideDiv, (_match, src) => {
  console.log(src);
  return `<oembed>${src}</oembed>`;
});
0 голосов
/ 31 января 2020

Попробуйте это RegEx:

(?<=(<div class="page-embed".+iframe src="))(.*?)(?=")

, который ищет строку между src=" и следующим " в div с вашим классом и iframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...