我想尝试使用js reg过滤所有选择器。预测我要匹配div#abc.read-more
。(请注意,div
,#abc
,.read-more
都可以存在或不存在。但如果存在div,则应该在开头) 。我在两个数组中列出了我所知道的所有情况:匹配和不匹配。这是test code。我使用 jasmine 测试工程师。
我现在使用的reg模式是/((\bdiv)+|(\.read-more)+|(#abc)+)(\s*|(:\w+)+)\s*(((?=,)(.*))|$)/
但仍然有两种情况没有通过。 .read-morediv#abc
和#abcdiv.read-more
。常见的是div
位于中间位置。
很抱歉,但我知道还有两种情况也会失败:div.read-morediv#abc
和div#abcdiv.read-more
。这两者都应该是无与伦比的。
任何人都可以在这里帮忙吗?如果您能解释如何获得解决方案,我将非常感激。 :d
答案 0 :(得分:1)
对于div.read-morediv#abc:
((\ bdiv)+ |(。read-more)+ |(#abc)+)匹配最后的'#abc'
(\ s * |(:\ w +)+)匹配以下0个空格(\ s *)
\ s *再次匹配0个空格
(((?=,)(。*))| $)匹配字符串的结尾(通过| $)
另一个例子的模式是类似的。在这两种情况下,在生成匹配时都会忽略'div'的存在,因为第一组中3部分OR的另一部分就足够了。