我想尝试使用 js reg 过滤所有选择器。预测我要匹配div#abc.read-more
。(请注意div
, #abc
, .read-more
all 可以存在也可以不存在。但如果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
最佳答案
对于 div.read-morediv#abc:
((\bdiv)+|(.read-more)+|(#abc)+) 匹配最后的 '#abc'
(\s*|(:\w+)+) 匹配后面的0个空格(\s*)
\s* 再次匹配 0 个空格
(((?=,)(.*))|$) 匹配字符串的结尾(通过 |$)
另一个例子的模式是相似的。在这两种情况下,在生成匹配时完全忽略“div”的存在,因为第一组中的 3 部分 OR 的另一部分就足够了。
关于javascript 正则表达式模式匹配 css 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624853/