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

时间:2013-02-02 21:47:03

标签: javascript parsing

基本上我的问题是我的程序需要文本输入,其中包含随机空格,制表符和其他空格单位(换行符,但不是很多)。

我已成功删除所有标签...

// Parse the input box into an array
var inputArr = document.getElementById("inputBox").value.split(/[\t]/);

现在文字看起来像这样......

“用于隐藏组的虚拟字段,,,,,,, *角色,转到,,,折叠部分摘要,,,,名称,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;

正如您可能会说的那样,我正在尝试让我的程序识别文本中的某些关键词并相应地切换一些布尔值。无论我如何配置条件,switch语句似乎都不会进入任何情况。例如案例......

case ("Name" && "Name " && " Name" && " Name "):

即使我使用||也不会触发。

在任何人发布之前。我发现我的代码充其量只是草率。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

首先,你只是在选项卡上拆分。要拆分任何空白字符序列,请执行以下操作:

var inputArr = document.getElementById("inputBox").value.split(/\s+/);

这将减少您需要处理的案件数量,因此您无需检查“名称”,“名称”,“名称”或“名称”,只需“名称”:

case "Name":
    ...
    break;

其次,这并不像你期望的那样(见下面的解释):

inputArr[i - 1] == ("Summary" || "Summary " || " Summary" || " Summary ")

但是上面的第一个更改,无论如何你都可以与“摘要”进行比较。

第三,对于您希望匹配完全不同的值的情况,您可以这样做:

case "VISA":
case "MASTERCARD":
case "AMERICAN":
case "DISCOVER":
    emailBool = false;
    break;

最后,你真的应该重新考虑你的整个方法,但没有更多具体细节,很难给你任何有意义的建议......

祝你好运!

编辑(为什么inputArr[i - 1] == ("Summary" || "Summary " || ...不起作用):

在Javascript中,非空字符串计为true,||&&可用作短路评估。例如,("Name" || " Name")得到的评估结果为"Name",因为"Name"为真,因此不需要计算等式的其余部分。同样地,("Name" && " Name")将等同于" Name",因为"Name"为真,因此它会移至下一个" Name",这也是正确的,并且是语句的结尾。要做你正在尝试的事情需要做的事情如下:

(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"

答案 1 :(得分:0)

在应用Ray的建议后,您可能还想从数组中删除空元素:

for (var i=inputArr.length-1; i>=0; i--){
    if (inputArr[i] == '' || !inputArr[i].match(/[^\s]/)) inputArr.splice(i,1)
}