Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何去掉match(regex操作符|)中的空项?_Javascript_Regex - Fatal编程技术网

Javascript 如何去掉match(regex操作符|)中的空项?

Javascript 如何去掉match(regex操作符|)中的空项?,javascript,regex,Javascript,Regex,如果单个选择器“body”的结果为1,如果元素选择器的多个选择器变量的结果为2,如何使结果C为1 “body”的当前结果为3(两个空项)。我需要去掉数组中的空项以获得正确的元素计数(body、div、ul、li)。我知道创建空项是因为在正则表达式的begin和end上使用了括号中的可选运算符|。但是如何去除空项呢?返回 包含整个匹配结果和任何 括号捕获匹配结果;如果没有匹配项,则为null 因此,除了使用globalgmodifier外,还应将这些捕获组更改为非捕获组: var selector

如果单个选择器“body”的结果为1,如果元素选择器的多个选择器变量的结果为2,如何使结果C为1

“body”的当前结果为3(两个空项)。我需要去掉数组中的空项以获得正确的元素计数(body、div、ul、li)。我知道创建空项是因为在正则表达式的begin和end上使用了括号中的可选运算符|。但是如何去除空项呢?

返回

包含整个匹配结果和任何 括号捕获匹配结果;如果没有匹配项,则为null

因此,除了使用global
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;
});