【问题标题】:Javascript and Regex: undefined and ""Javascript 和正则表达式:未定义和“”
【发布时间】:2018-04-19 01:21:40
【问题描述】:

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

当运行 regExp 来拆分我的字符串时,我会得到很多 undefined 和 "" 以及结果。我已经尝试使用“(?:”,我在stackoverflow的另一个答案中看到了它以及许多其他东西。 然后我使用 array.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"",")"]

谢谢!

【问题讨论】:

  • 你想达到什么目的?
  • 我刚刚编辑了它:)

标签: javascript regex regex-group


【解决方案1】:

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

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

【讨论】:

  • 我把它改成: let values = line.split(/(\!=|=|==|\/\/|\/*|*\/|"| =||\+|-|*|\\|(|)|;| )/g); 我预计它只返回“”字符,但它也返回“”,你呢?知道为什么会这样吗?返回值:["#include"、""、""、""、""、""、""]
  • 如果连续有两个分隔符,则返回它们之间的空字符串。如果字符串以分隔符开头或结尾,则返回之前或之后的空字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多