javascript - 正则表达式问题 - 未知的空格

标签 javascript parsing

基本上,我的问题是我的程序接受的文本输入充满了随机空格、制表符和其他空白单元(也有换行符,但没有那么多)。

我已成功删除所有选项卡...

// 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/

相关文章:

javascript - 鼠标事件未在 html5 Canvas 上触发

javascript - PhoneGap 上的 Hello World 构建

javascript - YouTube 限制播放问题

parsing - BigInteger.Parse() 对十六进制数给出负数

javascript - jQuery 获取发回的数据

javascript - 异步递归函数

python - 使用命名空间解析 XML 时出现问题

c# - 一个例程/函数中的 CSV 解析器?

parsing - 秒差距解析和分离不同的结构

java - 使用 MediaWiki 从 Wikia 页面提取文本,但返回时一团糟 有没有更好的方法可以从每个部分提取文本?