Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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未返回预期的正则表达式结果_Javascript_Regex - Fatal编程技术网

JavaScript未返回预期的正则表达式结果

JavaScript未返回预期的正则表达式结果,javascript,regex,Javascript,Regex,我正在对我的代码进行一点抽象,因为它最终将进入商业产品。我在使用正则表达式测试返回正确的结果时遇到了一些问题 var files = [ "Jurassic%20Park%20-%20Nedry.mp4", 'Jeb%20Corliss%20Grinding%20The%20Crack.mp4' ]; var filterSearch = function(text){ var filter = new RegExp(text, 'gi'); var displayFil

我正在对我的代码进行一点抽象,因为它最终将进入商业产品。我在使用正则表达式测试返回正确的结果时遇到了一些问题

var files = [
  "Jurassic%20Park%20-%20Nedry.mp4",
  'Jeb%20Corliss%20Grinding%20The%20Crack.mp4'
];
var filterSearch = function(text){
    var filter = new RegExp(text, 'gi');
    var displayFiles = files.filter(function(file){
       return filter.test( file.toLowerCase());
    });
    console.log(displayFiles);
}
如果我运行filterSearch('J')或filterSearch('N'),我希望得到两个结果,Jurassic Park和Jeb,而我只得到一个。对于两个文件之间共享的所有其他字符,它似乎都能正常工作,但对于J或N,它却不能正常工作。有人知道为什么我不能正常工作吗? 谢谢

编辑:我可以在repl.it上重复此操作。

使用而不是
test()
函数

示例

var filterSearch = function(text){
    var filter = new RegExp(text, 'gi');
    var displayFiles = files.filter(function(file){     
        return file.search(filter) != -1 ? true : false ;


    });
    console.log(filter);
    console.log(displayFiles);
}

filterSearch('J');
将给您一个输出

["Jurassic%20Park%20-%20Nedry.mp4", "Jeb%20Corliss%20Grinding%20The%20Crack.mp4"]

这是因为在同一全局正则表达式实例上多次调用的
test()
将超过上一个匹配。()


在RegExp上调用test时,它会维护最后一个匹配的lastIndex属性(有关更多详细信息,请参阅)。 下次搜索时(即使是在另一个字符串中),lastIndex+1是搜索的起始位置

防止这种情况发生的最简单方法是在正则表达式定义中省略全局标志(我认为在这种情况下不需要全局标志),或者在searchFilter函数的每次迭代中将lastIndex重置为-1。

当全局(g)标志与test()或exec()一起使用时,lastIndex被设置为最近匹配的下一个位置。您必须将filter.lastIndex重置为0,或者实际上可以忽略“g”标志


阅读有关成功的

。我创建了一些测试文件,其中包含了字母表中的所有字母/数字,以供确认,并且它可以正常工作。谢谢@用户2684405不客气。很乐意帮忙:)