比较并索引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;
}
})