2017-02-13 70 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>