Javascript 如何匹配模式顺序未知的正则表达式

Javascript 如何匹配模式顺序未知的正则表达式,javascript,regex,Javascript,Regex,我有一个HTML文件,其中div有类名。我需要找到具有给定类的精确集合的div。但问题是我不知道类在div中的写入顺序。例如: 给定的类列表:1、2、3 简化HTML 非常感谢您的任何建议 编辑:Html文本,就像在我的示例中一样,不需要是有效的。它可以包含多个具有相同id的div或未关闭的div。请注意,单个文档中重复的id是无效的HTML。如果您可以控制源代码,最好改用类 而不是在处理HTML解析时经常使用笨拙和不雅的正则表达式,考虑使用DOMPARSER,然后检查每个元素的类列表: 常量

我有一个HTML文件,其中div有类名。我需要找到具有给定类的精确集合的div。但问题是我不知道类在div中的写入顺序。例如:

给定的类列表:1、2、3

简化HTML

非常感谢您的任何建议


编辑:Html文本,就像在我的示例中一样,不需要是有效的。它可以包含多个具有相同id的div或未关闭的div。

请注意,单个文档中重复的id是无效的HTML。如果您可以控制源代码,最好改用类

而不是在处理HTML解析时经常使用笨拙和不雅的正则表达式,考虑使用DOMPARSER,然后检查每个元素的类列表:

常量输入=` 一场比赛!因为它包含类1 2 3 一场比赛!因为它包含类1 2 3 一场比赛!因为它包含类1 2 3 m4不是匹配项,因为它包含除1、2、3以外的其他类 m5不是匹配项,因为它包含除1、2、3以外的其他类 `; const doc=new DOMParser.parseFromStringinput,'text/html'; const matchingDivs=Array.prototype.filter.call 文档查询选择器all'div', {classList}=> 类列表。包含“1”&& 类列表。包含“2”&& 类列表。包含“3”&& classList.length==3 ;
console.logmatchingDivs 正则表达式不是正确的方法。您希望通过它们的类集匹配div,即,给定输入集中的类的交集与div的类集匹配:

const findDivsWithClasses=classes=>{ const classesSet=新的Setclasses.split“”; return[…document.getElementsByTagName'div'].filterdiv=> div.classList.length==classesSet.size&[…div.classList].everyclassName=>classesSet.hasclassName; } console.logfindDivsWithClasses'1 2 3'; 比赛!因为它包含类1 2 3 比赛!因为它包含类1 2 3 比赛!因为它包含类1 2 3 不匹配,因为它包含除1、2、3以外的其他类
不匹配,因为它包含除1、2、3Hey以外的其他类。谢谢它确实是无效的html。我应该提到这一点。出于这个原因,我更喜欢正则表达式而不是DOMParser。嘿,谢谢。但我已经提到,它也可能是无效的html。在这种情况下,你的答案不起作用。如果你的html无效到无法呈现的程度,那么你将根本无法询问它-如果它确实呈现,这个解决方案将起作用
<div id="test" class="1 2 3"></div> #A match! since it contains classes 1 2 3
<div id="test" class="3 2 1"></div> #A match! since it contains classes 1 2 3
<div id="test" class="2 1 3"></div> #A match! since it contains classes 1 2 3
<div id="test" class="1 2 3 4"></div> #not a match since it contains other classes than 1, 2, 3
<div id="test" class="1 2 3 5 6"></div> #not a match since it contains other classes than 1, 2, 3