Javascript querySelectorAll参数的正则表达式验证器

Javascript querySelectorAll参数的正则表达式验证器,javascript,css,regex,css-selectors,selectors-api,Javascript,Css,Regex,Css Selectors,Selectors Api,我已经编写了非常基本的正则表达式来验证querySelectorAll()方法的参数。 验证了一些随机值,似乎工作正常 我只是想知道是否可以做一些改进 regex可能会错过一些验证,但我的主要问题是关于我的方法,关于我编写这个regex的方式。 而且我对regex还是个新手。请指出我是否在性能方面犯了任何重大错误 var p = /^([A-Za-z0-6]*|\*)?((?:(?:#|\.|:|\[)[-A-za-z0-9()+\s"=|^$*]+)*)$/; /* [A-Za-z0-

我已经编写了非常基本的正则表达式来验证querySelectorAll()方法的参数。 验证了一些随机值,似乎工作正常

我只是想知道是否可以做一些改进

regex可能会错过一些验证,但我的主要问题是关于我的方法,关于我编写这个regex的方式。 而且我对regex还是个新手。请指出我是否在性能方面犯了任何重大错误

var p = /^([A-Za-z0-6]*|\*)?((?:(?:#|\.|:|\[)[-A-za-z0-9()+\s"=|^$*]+)*)$/;

/* 


[A-Za-z0-6]* Type selector
\* Universal selector
#|\.|:|\[ for id,class,attribute and psuedo classes
[-A-za-z0-9()+\s"=|^$*]+ id,class, attribute or pseudo class value


*/

var stringArray = [
"div",
"div:first-child",
"div#id",
"div123",
"h1",
"*.warning",
".warning",
"*#myid",
"#myid",
"p.pastoral.marine",
"h1#chapter1",
"*#z98y",
"a.external:visited",
"a:visited",
"a:focus:hover",
"tr:nth-child(2n+1)",
"tr:nth-child(odd)",
"p:nth-child(4n+4)",
"foo:nth-child(0n+5)",
"foo:nth-child(5)",
":nth-child( 3n + 1 )",
"img:nth-of-type(2n+1)",
"h2:nth-of-type(n+2):nth-last-of-type(n+2)",
"h2:not(:first-of-type):not(:last-of-type)",
"h1[title]",
'span[class="example"]',
'span[hello="Cleveland"][goodbye="Columbus"]',
'a[hreflang|="en"]',
'object[type^="image"]',
'a[href$=".html"]',
'p[title*="hello"]'
];

验证
querySelectorAll
选择器最简洁可靠的方法是调用函数本身并检查它是否抛出:

const validateSelector=selector=>{
请尝试{document.querySelectorAll(选择器)}
catch{return false}
返回true;
}
console.log(validateSelector('abc!?#&^123'));//错误的

console.log(validateSelector('div>text'));//true
这些正则表达式将仅与特定内容匹配。这就是你想要的,还是普通选择器?若有,;您需要不同(可能更少)的正则表达式匹配<代码>AB,
a>b
a+b
a~b
,等等。。还有
a::before
a::after
a::first letter
,等等。CSS选择器真的可以用这种方法检查吗?是的,Paul,我只是在寻找没有组合符的简单选择器序列,我不确定,但也许JSCSSP对您有用,使用解析而不是正则表达式@PK:你怎么知道可以用这种方式检查它们(我想这就是你的“是”的意思)?理论上,验证用于
querySelectorAll()
的选择器最准确的方法是调用它,看看它是否引发异常,但这可能会导致不必要的性能开销。