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');
};