一个特定的 JS 解析器(不在我的控制之下)不理解这样的嵌套条件运算符语法:
return num === 1 ? condition ? condition : something : something;
因此,我想用 if/else block 替换文件中的所有条件运算符(简单的和嵌套的)。我该怎么做? (Textmate 或类似的正则表达式会有所帮助。)
最佳答案
How do I go about it? (A regexp for Textmate or similar would be helpful.
我认为这对于正则表达式是不可能的——你需要用它们来解析整个 JS 表达式语法。当然,您可以使用它们来查找三元运算符的出现,但需要手动替换它们。
这是因为条件运算符形成表达式,而 if/else 结构是语句。这意味着您将需要取消包含 if-else 周围的三元运算符的语句。改造一般有两种方案
<some statement ( condition
?
then-expression:
else-expression) >
-
if (
condition) {
<some statement then-expression>
} else {
<some statement else-expression>
}
-
var helper;
if (
condition)
helper =
then-expression;
else
helper =
else-expression;
<some statement
helper
>
选择哪一个取决于某些语句的复杂性(对于您的return
-语句,我会选择#1)。由于替换带来了自己的语法规则,您甚至可能需要调整周围的 block 。所有这一切都不是一项微不足道的任务,恕我直言,只有当您已经有了要转换的已解析 AST 时才能自动完成。
关于javascript - 自动用 if/else 替换条件运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690067/