Javascript 通过正则表达式查找所有HTML标记(br和li标记除外)

Javascript 通过正则表达式查找所有HTML标记(br和li标记除外),javascript,html,regex,Javascript,Html,Regex,在我的Javascript代码中,我面临一个与regex相关的问题。我正在寻找一个正则表达式,它可以匹配所有HTMl标记,除了br标记和li(包括ol和ul) 到目前为止,我有一个regex,它可以检测除br标记之外的HTML标记。具体如下: (<((?!br)[^>]+(.*?)?)>) (]+(.*?)>) 需要有关、和标签的帮助。(也包括结束标记) 下面是用于检查的示例文本 嗨 一, 二, 三, 你好世界::) 'https://www.youtube.com

在我的
Javascript
代码中,我面临一个与regex相关的问题。我正在寻找一个正则表达式,它可以匹配所有
HTMl
标记,除了
br
标记和li(包括
ol
ul

到目前为止,我有一个regex,它可以检测除br标记之外的HTML标记。具体如下:

(<((?!br)[^>]+(.*?)?)>)
(]+(.*?)>)
需要有关
    • 标签的帮助。(也包括结束标记)

      下面是用于检查的示例文本

      
      
      • 一,
      • 二,
      • 三,
      你好
      世界
      ::) 'https://www.youtube.com' 普通文本:不应匹配!! 'https://www.hotmail.com'
      /(]+(.*?)/ig
      
      有句老话,如果你想用正则表达式解决你的问题,你最终会遇到两个问题。尽管公认是一个强大的工具,但在这种情况下,正则表达式只能作为最后手段使用

      请尝试以下方法:

      const getAllNodesExceptBrAndLi = htmlString => {
        const template = document.createElement('template');
        template.innerHTML = htmlString;
        const allNodes = template.content.querySelectorAll('*');
      
        return [...allNodes].filter(node => node.tagName !== 'BR' && node.tagName !== 'LI');
      };
      

      正则表达式不是用于此目的的合适工具。为什么不使用HTML解析器呢?对于这项工作来说,正则表达式是错误的工具。(例如,如果有任何父标记包装要保留的内容,则现有正则表达式将失败。)。HTML是复杂的结构化数据,最好使用专为处理它而设计的DOM工具,而不是强制它通过字符串解析器。一旦HTML属性添加到混合中,这将失败。如果您关心健壮的代码,那么Przemek提出的解决方案是一个更好的选择。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-
      const getAllNodesExceptBrAndLi = htmlString => {
        const template = document.createElement('template');
        template.innerHTML = htmlString;
        const allNodes = template.content.querySelectorAll('*');
      
        return [...allNodes].filter(node => node.tagName !== 'BR' && node.tagName !== 'LI');
      };