Javascript 如何使用regexp不匹配包含特定标记的HTML标记?

Javascript 如何使用regexp不匹配包含特定标记的HTML标记?,javascript,html,regex,xpath,Javascript,Html,Regex,Xpath,我有一个这样的链接,我想与regexp匹配: <a href="tel:something">something</a> 我设法将它与 我尝试使用负前瞻(?!(]*>)来排除,但它不起作用。我的正则表达式如下: /<a[^>]+tel:.*?>(?!(<\/?span[^>]*>)).*?<\/a>/ig /]+电话:.*?>(?!(]*>).*/ig 您应该使用XPath执行此操作: // O

我有一个这样的链接,我想与regexp匹配:

<a href="tel:something">something</a>

我设法将它与

我尝试使用负前瞻
(?!(]*>)
来排除
,但它不起作用。我的正则表达式如下:

/<a[^>]+tel:.*?>(?!(<\/?span[^>]*>)).*?<\/a>/ig
/]+电话:.*?>(?!(]*>).*/ig

您应该使用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.log(thisNode);
  
  thisNode = iterator.iterateNext();
}
//我们的HTML源代码
变量s=`
`;
//创建根div,因为XML需要一个根元素
var div=document.createElement('div');
//将innerHTML设置为我们的字符串
div.innerHTML=s;
//发现

这将产生:

<a href="tel:something">something1</a>
<a href="tel:something">something2</a>
<a href="tel:something">something3</a>


Javascript具有本机XPath支持。HTML字符串的来源是什么?除非您将以某种方式处理
text()
的输出,否则使用regex的理由几乎没有。谢谢,我将研究XPath!HTML字符串的来源:var content=document.documentElement.innerHTML;永远不要用正则表达式解析html@我明白了,我明白了。您可以直接跳到
var迭代器
行。@DrMe好极了!如果这有助于您解决问题,请随时将我的答案标记为已接受:)
<a href="tel:something">something1</a>
<a href="tel:something">something2</a>
<a href="tel:something">something3</a>