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

вы можете использовать метод split, я думаю, ваше решение должно быть своего рода рекурсией, разбор текста не является тривиальной операцией, и его нельзя недооценивать. –

+0

Что это связано с лексикой? –

ответ

0

Вы можете использовать replace с регулярными выражениями, чтобы добиться того, чего вы хотите. Замены будут:

  1. заменить /\(/g (открытой) с скобкой '<ul><li>'. (/\s*\(\s*/g, чтобы удалить все окружающие помещения)
  2. заменить /\)/g (закрыть 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>

Смежные вопросы