用if/else自动替换条件运算符?

dan*_*ani 3 javascript regex replace conditional-operator

特定的JS解析器(不在我的控件中)不理解嵌套的条件运算符语法,如下所示:

return num === 1 ? condition ? condition : something : something;
Run Code Online (Sandbox Code Playgroud)

因此,我想用if/else块替换文件中的所有条件运算符(简单和嵌套).我该怎么办呢?(Textmate或类似的regexp会有所帮助.)

Ber*_*rgi 5

我该怎么办呢?(Textmate或类似的正则表达式会有所帮助.

我不认为这对正则表达式是可行的 - 你需要用它们解析整个JS表达式语法.当然,您可以使用它们来查找三元运算符的外观,但替换它们需要手动完成.

这是因为条件运算符形成表达式,而if/else结构是语句.这意味着你需要在if-else周围解除包含三元运算符的语句.改造将军有两种解决方案

<some statement(condition ? then-expression : else-expression)>

  1. if ( 条件 ) {

    <some statement then-expression>

    } else {

    <some statement else-expression>

    }

  2. var helper;

    if ( 条件 )

    helper = 然后表达;

    else

    helper = 别的表达;

    <某些声明 helper>

选择哪一个取决于某些陈述的复杂性(对于你的return陈述,我选择#1).由于替换带来了自己的语法规则,您甚至可能需要调整周围的块.所有这一切都不是一项微不足道的任务,只有当你已经有一个解析后的AST进行转换时,imho才能自动完成.