2017-02-13 68 views
1

我有一个数据字符串,我需要解析和消毒人类可读格式的输出。我想使用JavaScript将字符串转换为键控数组,保留嵌套层次结构。解析与键和消毒的嵌套字符串 - javascript

例如,我有这个字符串:

(id, foo bar,category(subCategory,location(id)), something) 

而且我想这个解析和使用也许键阵列来输出这个页面上,像这样:

<ul> 
    <li>id<li> 
    <li>foo bar</li> 
    <li>category 
     <ul> 
      <li>subCategory<li> 
      <li>location 
       <ul> 
        <li>id</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li>something</li> 
</ul> 

什么是使用JavaScript来实现这一点的最灵活的方式,同时也消除了值和逗号之间的空格,但保留了单词之间的空格?

谢谢!

+1

请仔细阅读[问]。重要短语:“搜索和研究”和“解释......阻止你自己解决它的任何困难”。 –

+0

你可以使用拆分方法我猜,你的解决方案应该是一种递归,解析文本并不是一个简单的操作,也不能低估它。 –

+0

这与lexing有什么关系? –

回答

0

您可以使用replace正则表达式来达到您想要的效果。替换将是:

  1. 替换/\(/g(开放包装)与'<ul><li>'。 (/\s*\(\s*/g删除周围空间,如果有的话)
  2. 替换/\)/g(close parens)与'</li></ul>'。 (/\s*\)\s*/g删除周围空间,如果有的话)
  3. 替换/,/g(逗号)与'</li><li>'。 (如果有的话/\s*,\s*/g清除周围的空间)

var str = "(id, foo bar,category(subCategory,location(id)), something)"; 
 

 
str = str.replace(/\s*\(\s*/g, '<ul><li>') 
 
     .replace(/\s*\)\s*/g, '</li></ul>') 
 
     .replace(/\s*,\s*/g, '</li><li>'); 
 

 
document.getElementById("result").innerHTML = str;
<div id="result"></div>