Javascript 如何去掉match(regex操作符|)中的空项?
如果单个选择器“body”的结果为1,如果元素选择器的多个选择器变量的结果为2,如何使结果C为1 “body”的当前结果为3(两个空项)。我需要去掉数组中的空项以获得正确的元素计数(body、div、ul、li)。我知道创建空项是因为在正则表达式的begin和end上使用了括号中的可选运算符|。但是如何去除空项呢?返回 包含整个匹配结果和任何 括号捕获匹配结果;如果没有匹配项,则为null 因此,除了使用globalJavascript 如何去掉match(regex操作符|)中的空项?,javascript,regex,Javascript,Regex,如果单个选择器“body”的结果为1,如果元素选择器的多个选择器变量的结果为2,如何使结果C为1 “body”的当前结果为3(两个空项)。我需要去掉数组中的空项以获得正确的元素计数(body、div、ul、li)。我知道创建空项是因为在正则表达式的begin和end上使用了括号中的可选运算符|。但是如何去除空项呢?返回 包含整个匹配结果和任何 括号捕获匹配结果;如果没有匹配项,则为null 因此,除了使用globalgmodifier外,还应将这些捕获组更改为非捕获组: var selector
g
modifier外,还应将这些捕获组更改为非捕获组:
var selectorText = "body" ; // first variant
// var selectorText = "div#id, div.body"; // multiple selector variant
// var selectorText = "div#id ul li, div.body"; // multiple selector variant
var C1 = selectorText.match(/(^|\s|,)\w+($|[\s,#\.:\[])/); // element
var C = !C1 ? 0 : C1.length;
>“body”.match(/(?:^\s |,)\w+(?:$。[\s,\\.:\[])/g)长度;
< 1
>“div#id,div.body”。匹配(/(?:^\s |,)\w+(?:$。[\s,\:\[])/g)。长度;
< 2
包括g
标志
发件人:
如果正则表达式不包含g标志,则返回
结果与相同
String.prototype.match()
方法返回一个数组,因此您可以使用array.prototype.map()
方法删除空项(即,返回非空项)
请参阅:为什么不过滤生成的数组?制作正确的正则表达式会更简单。但是过滤的想法很好,因此如果没有其他方法,我可以尝试。
> "body".match(/(?:^|\s|,)\w+(?:$|[\s,#\.:\[])/g).length;
< 1
> "div#id, div.body".match(/(?:^|\s|,)\w+(?:$|[\s,#\.:\[])/g).length;
< 2
var regex = /(^|\s|,)\w+($|[\s,#\.:\[])/;
var C1 = selectorText.match(regex).map(function(item){
if ( item != "" ) return item;
});