У меня есть такая ссылка, которую я хочу сопоставить с регулярным выражением:
<a href = "tel:something">something</a>
Мне удалось сопоставить его с <a[^>]+tel:.*?>.*?</a>
Но я не хочу сопоставлять ссылки, внутри которых есть <span></span>
:
<a href = "tel:[some_numbers]"><span class = "hello">Hello</span>[some_numbers]</a>
Я пытался использовать отрицательный просмотр (?!(</?span[^>]*>))
, чтобы исключить <span></span>
, но это не сработало. Мое регулярное выражение ниже:
/<a[^>]+tel:.*?>(?!(</?span[^>]*>)).*?</a>/ig
Спасибо, я посмотрю на XPath! Источник строки HTML: var content = document.documentElement.innerHTML;
Никогда не анализируйте html с помощью регулярных выражений. stackoverflow.com/questions/1732348/…
@DrMe Понятно, посмотри мой ответ. Вы можете сразу перейти к строке var iterator
.
Вы должны сделать это с помощью XPath:
// Our HTML source
var s = `<a href = "tel:something">something1</a>
<a href = "tel:[some_numbers]"><span class = "hello">Hello1</span>[some_numbers]</a>
<a href = "tel:something">something2</a>
<a href = "tel:[some_numbers]"><span class = "hello">Hello2</span>[some_numbers]</a>
<a href = "tel:something">something3</a>
<a href = "tel:[some_numbers]"><span class = "hello">Hello3</span>[some_numbers]</a>`;
// Create a root div because XML requires a single root element
var div = document.createElement('div');
// Set the innerHTML to our string
div.innerHTML = s;
// Find <a> tags with no direct child <span> tag(s)
var iterator = document.evaluate('//a[not(span)]', div, null, XPathResult.ANY_TYPE, null);
// Set the iterator
var thisNode = iterator.iterateNext();
// Loop the iterator and log the node found
while (thisNode) {
console.info(thisNode);
thisNode = iterator.iterateNext();
}
https://jsfiddle.net/kad3ouqL/
Это должно дать:
<a href = "tel:something">something1</a>
<a href = "tel:something">something2</a>
<a href = "tel:something">something3</a>
@DrMe Отлично! Если это помогло вам решить вашу проблему, пожалуйста, отметьте мой ответ как принятый :)
Javascript имеет встроенную поддержку XPath. Каков источник вашей строки HTML? Для регулярного выражения нет буквально нулевой причины, если вы не будете каким-то образом обрабатывать вывод
text()
.