比较并索引Javascript数组中的正则表达式

比较并索引Javascript数组中的正则表达式,javascript,arrays,regex,Javascript,Arrays,Regex,我有两个阵列: enteredCommands = ["valid", "this", 1.1]; validParameters = [/valid/, /alsoValid/, /this|that/, /\d+(\.)?\d*/]; 我想循环查看所有输入的命令,如果它存在于validParameters中,则将其从validParameters中删除,如果不存在,则断开 如果我将validParameters更改为: validParameters=[“valid”,“alsoValid

我有两个阵列:

enteredCommands = ["valid", "this", 1.1];
validParameters = [/valid/, /alsoValid/, /this|that/, /\d+(\.)?\d*/];
我想循环查看所有输入的
命令
,如果它存在于
validParameters
中,则将其从
validParameters
中删除,如果不存在,则断开

如果我将
validParameters
更改为:

validParameters=[“valid”,“alsoValid”,“this | that/,/\d+(\)?\d*/]

和使用:

var ok2go = true;
// For each entered command...
for (var i = 0; i < commands.length; i++) {
     // Check to see that it is a valid parameter
     if (validParameters.indexOf(commands[i]) === -1) {
         // If not, an invalid command was entered.
         ok2go = false;
         break;
     // If valid, remove from list of valid parameters so as to prevent duplicates.
     } else {
         validParameters.splice(validParameters.indexOf(commands[i]), 1);
     }
     return ok2go;
}

if (ok2go) {
   // do stuff if all the commands are valid
} else {
   alert("Invalid command");
}

您可以过滤给定的命令,如果正则表达式匹配,则将其从正则表达式数组中排除。仅返回与正则表达式数组其余部分不匹配的逗号

<代码>功能检查(数组){ var regex=[/valid/,/alsoValid/,/this | that/,/\d+(\)?\d*/]; 返回数组.filter(函数(a){ var无效=真; regex=regex.filter(函数(r){ 如果(!r.测试(a)){ 返回true; } 无效=错误; }); 无效&&alert('invalid command:'+a); 返回无效; }); } 日志(检查([“有效”,“此”,1.1,3]);//输入了2位数字 console.log(检查([“valid”,“alsoValid”,“x”]);//输入x
console.log(检查([“valid”,“alsoValid”,1]));//无,未找到无效命令
我建议您将匹配正则表达式的检查和匹配字符串的检查分开

从概念上讲,您可能希望执行以下操作(未测试代码)

var validStringParameters=[“valid”,“alsoValid”];
var validRegexMatches=[/valid/,/alsoValid/,/this | that/,/\d+(\)?\d*/];
var validCommand=enteredcommands.filter(函数(命令)){
if(validStringParameters.indexOf(命令)!=-1){
返回true;
}
对于(变量i=0;i
请添加想要的结果。根本不清楚您要求或想要实现什么想要的结果只是验证所有输入的
命令是否只存在于
有效参数中一次。因此:“我想循环遍历所有
输入的命令,如果它存在于
有效参数中
将其从
有效参数中删除,如果它不存在,则中断。”如果
输入的命令
包括类似
“x”
,则这不解决问题,在这种情况下,我想提醒您输入了无效的命令。请在问题中添加一些测试用例,以及应该发生什么。实际上,如果输入了无效的命令,这个答案会提前检查
输入的命令。
添加了测试用例,目标不一定是从
有效参数
中删除内容,只是在执行剩余的函数之前进行语法检查。
enteredCommands = ["valid", "this", 1.1, 3];
// Expected Result: ok2go = false because 2 digits were entered

enteredCommands = ["valid", "alsoValid", "x"];
// Expected Result: ok2go = false because x was entered

enteredCommands = ["valid", "alsoValid", 1];
// Expected Result: ok2go = true because no invalid commands were found so we can continue on with the rest of the code
var validStringParameters = ["valid", "alsoValid"];
var validRegexMatches = [/valid/, /alsoValid/, /this|that/, /\d+(\.)?\d*/];

var validCommands = enteredcommands.filter(function(command){
if (validStringParameters.indexOf(command) !== -1){
return true;
}
for (var i = 0; i < validRegexMatches.length; i++){
if (command.test(validRegexMatches[i]){
return true;
})
return false;
}
})