代码之家  ›  专栏  ›  技术社区  ›  Julio

Javascript和Regex:未定义和“”

  •  0
  • Julio  · 技术社区  · 6 年前

    我对正则表达式不是很熟悉,我有以下问题:

    当运行regExp分割字符串时,我会得到许多未定义的和“”以及结果。我已经尝试过使用“(?:”,我在stackoverflow和其他很多东西中看到了另一个答案。 然后我使用数组。filter函数来删除它们,但我不想这样做。有人能帮我吗?(并向我解释为什么会发生这种情况)。

    let values = line.split(/(\!=)|(<=)|(>=)|(==)|(\/\/)|(\/\*)|(\*\/)|(")|(=)|(<)|(>)|(\+)|(-)|(\*)|(\\)|(\()|(\))|;| /g);
    
    return values.filter(value => {
        return value !== undefined && value !== "";
    });
    

    可以使用的字符串:

    "int x = 7;" => ["int","x","=","7",";"]
    
    "int x = 7 + 25 * 52" => ["int","x","=","7","+","25","*","52"]
    
    "while( x != 0)" => ["while","(","x","!=","0",")"]
    
    'if(idade > 70 && sexo == "masculino")' 
        => ["if","(","idade",">","70","&&","sexo","==",""masculino"",")"]
    

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Barmar 0___________    6 年前

    原因是您在自己的捕获组中有每个备选方案。将只填写实际匹配的捕获组,其余组将为空。相反,将捕获小组放在所有备选方案周围。

    line = "#include <stdio.h>";
    let values = line.split(/(\!=|<=|>=|==|\/\/|\/\*|\*\/|"|=|<|>|\+|-|\*|\\|\(|\)|;| )/g);
    console.log(values);