基本上,我的问题是我的程序接受的文本输入充满了随机空格、制表符和其他空白单元(也有换行符,但没有那么多)。
我已成功删除所有选项卡...
// Parse the input box into an array
var inputArr = document.getElementById("inputBox").value.split(/[\t]/);
现在文本看起来像这样......
“隐藏组的虚拟字段 , , , , , , ,* Angular 色 ,转到 , , , 折叠部分摘要 , , , ,名称 ,Doe,John ,详细信息 ,客户 ,John Doe Inc.
我的问题:我有一个开关...
switch(inputArr[i]) {
...有几种情况...
case ("Name" || "Name " || " Name" || " Name "):
if(inputArr[i - 1] == ("Summary" || "Summary " || " Summary" || " Summary ")) {
contNameBool = true;
break;
}
break;
case ("Details" || "Details " || " Details" || " Details "):
if(contNameBool == true) {
contNameBool = false;
break;
} else if(contNameBool == false && compNameBool == true) {
compNameBool = false;
break;
}
break;
case ("Customer" || "Customer " || " Customer" || " Customer "):
if(inputArr[i - 1] == "Details") {
contNameBool = false;
compNameBool = true;
break;
}
break;
case "Address":
if(inputArr[i - 1] == "Profile") {
compNameBool = false;
emailBool = true;
break;
}
break;
case ("VISA" || "MASTERCARD" || "AMERICAN" || "DISCOVER"):
emailBool = false;
break;
case "Show":
if(inputArr[i + 1] == "next" && inputArr[1 + 2] == "row") {
accountLinesArray.length = inputArr[i - 1];
for(j = 0; j < accountLinesArray.length; j++) {
accountLinesArray[j] = new account();
}
break;
}
break;
case "Order":
if(inputArr[i + 1] == "ID" && inputArr[i + 2] == "MRC") {
accountsBool = true;
break;
}
break;
正如您可能知道的那样,我正在尝试让我的程序识别文本中的某些关键字并相应地切换一些 bool 值。无论我如何配置条件,switch 语句似乎都不会涉及任何情况。例如案例...
case ("Name" && "Name " && " Name" && " Name "):
即使我使用 || 也不会触发。
在有人发布之前。我意识到我的代码充其量是草率的。任何帮助将不胜感激。
最佳答案
首先,您仅在选项卡上进行拆分。要分割任何空白字符序列,请执行以下操作:
var inputArr = document.getElementById("inputBox").value.split(/\s+/);
这将减少您需要处理的案例数量,因此您无需检查“Name”、“Name”、“Name”或“Name”,只需检查“Name”:
case "Name":
...
break;
其次,这并不符合您的预期(请参阅下面的解释):
inputArr[i - 1] == ("Summary" || "Summary " || " Summary" || " Summary ")
但是通过上面的第一个更改,您无论如何都可以与“Summary”进行比较。
第三,对于您确实想要匹配完全不同的值的情况,您可以这样做:
case "VISA":
case "MASTERCARD":
case "AMERICAN":
case "DISCOVER":
emailBool = false;
break;
最后,您确实应该重新考虑您的整个方法,但如果没有更多细节,很难就此向您提供任何有意义的建议......
祝你好运!
编辑(为什么 inputArr[i - 1] == ("Summary"|| "Summary"|| ...
不起作用):
在 Javascript 中,非空字符串视为 true,并且 ||
和 &&
可用作短路评估。例如, ("Name"|| "Name")
get 的计算结果为 "Name"
因为 "Name"
为 true,因此其余部分该方程不需要计算。同样,("Name"&& "Name")
相当于 "Name"
,因为 "Name"
为 true,所以它会继续到下一个,"Name"
,这也是 true,并且是语句的结尾。要执行您尝试的操作,需要执行以下操作:
(inputArr[i - 1] == "Summary") || (inputArr[i - 1] == "Summary ") || ...
或者可以通过使用正则表达式更简单地完成:
!!inputArr[i - 1].match("Summary").length
// Be careful though, as this could also match something like "NotASummaryDude"
关于javascript - 正则表达式问题 - 未知的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666867/