1

我如何将每条条件语句分组在 if 括号内。假设我有来自我的 contenteditable div 的文本。这不仅仅是语法高亮,我将在后面的代码中使用换行文本进行处理。

text = if ( x==1 && (x>2 || (!x>2 || x<=0)) )

我希望它们相应地分组并存储在这样的数组中

condFragment[0]=('x==1 && (x>2 || (!x>2 || x<=0))');
condFragment[1]=('x==1');
condFragment[2]=('(x>2 || (!x>2 || x<=0))');
condFragment[3]=('x>2');
condFragment[4]=('(!x>2 || x<=0)');
condFragment[5]=('!x>2');
condFragment[6]=('x>2');
condFragment[7]=('x<=0');

由此:

<div id="board">
     <div>int main(){</div>
     <div></div>
     <div>if(x==1 && !x>2)</div>
     <div>statement;</div>
     <div>while(!x>5){</div>
     <div>statement;}</div>
     <div>}</div>
</div>

这就是我想通过使用condFragment内容来实现的目标

<div id="board">
     <div>int main(){</div>
     <div></div>
     <div>
     if(<span class="frag"><span class="frag">x==1</span> && 
     <span class="frag">!<span class="frag">x>2</span></span></span>)
     </div>
     <div>statement;</div>
     <div>while(!x>5){</div>
     <div>statement;}</div>
     <div>}</div>
</div>   

更新

我基于以下解决这个问题的想法text是:

  1. 搜索 && || !从左到右
  2. 如果找到一个得到 indexOF( && or || or !)
  3. 如果找到的 && 的左侧被括号包围,则将其从那里切片到 && 的索引
  4. 如果 && 的右侧是一个开放的括号,则在 && 之后将其切片,直到找到 2nd 的第一个)

但我怎么知道那些是我应该切片的地方?

4

1 回答 1

1

在这种情况下,您最好拥有一个完整的 javascript 解析器。

看看https://github.com/mishoo/UglifyJS

这个项目包括一个完整的 JS 解析器。

于 2013-09-03T07:18:27.540 回答