#javascript
#javascript
Вопрос:
У меня есть эти переменные ниже :
let x = '5(2 1(3(4-1))';
let y = [];
Мне нужно извлечь любую строку между ()
и нажать array
, чтобы она выводилась как:
console.log(y); // Array should be y[4-1,3,2 1,5]
Как я могу это решить?
Комментарии:
1. Используйте RDP: en.wikipedia.org/wiki/Recursive_descent_parser
2. Разбор арифметических выражений в круглых скобках: blog.roboblob.com/2014/12/16 /…
3. Учитывая, что сплющенная структура не представляет вложенности исходных выражений или каких-либо отношений между ними, вы также можете просто использовать
x.split(/(|)/g)
Ответ №1:
попробуйте использовать это регулярное выражение
let x = '5(2 1(3(4-1))';
let y = [];
let regex = /(?(d ([ -]d )?)/gm;
let m
while ((m = regex.exec(x)) !== null) {
y.push(m[1])
}
y = y.reverse()
console.log(y)
Ответ №2:
Это может быть достигнуто путем рекурсивного применения получения регулярных выражений и замены пары inner most () до тех пор, пока не останутся только последние 5, или путем создания реального синтаксического анализатора.
В зависимости от того, как может выглядеть ввод, регулярное выражение может не работать.
Но простого решения не существует, и это будет зависеть от того, какой именно формат вы можете получить.