RegEx для исключения слова в значении атрибута HTML - PullRequest
0 голосов
/ 21 мая 2019

У меня есть регулярное выражение, которое находит и находит все <a></a> в моих документах, которые я затем перебираю и обрабатываю.Ниже приведено то, что я использую, и это прекрасно работает.

<a\b[^>]*>(.*?)<\/a>

Это соответствует всем приведенным ниже образцам, как

<a><img src="http://example.com/image-file.png"></a>
<a href="mailto:test@test.com">Click to Mail</a>
<a href="http://www.yahoo.com#YahoosAnchor">blabla</a>

Но мне интересно, можно ли изменить RegEx, чтобы исключить любое совпадение для <a href="mailto: как я не хочу их обрабатывать?

1 Ответ

1 голос
/ 22 мая 2019

Для данных в качестве примера одним из вариантов может быть использование отрицательного просмотра:

<a\b(?![^>]*href="mailto)[^>]*>(.*?)<\/a>

Другим вариантом может быть использование синтаксического анализатора dom:

let parser = new DOMParser();
let html = `<a><img src="http://example.com/image-file.png"></a>
<a href="mailto:test@test.com">Click to Mail</a>
<a href="http://www.yahoo.com#YahoosAnchor">blabla</a>`;
let doc = parser.parseFromString(html, "text/html");
let anchors = Array.from(doc.querySelectorAll("a"))
  .filter(a => !a.href.startsWith("mailto:"));

console.log(anchors);
...