RegExp в Javascript, чтобы найти все конструкции в скобках - PullRequest
0 голосов
/ 12 марта 2020

Что ж, у меня есть такие выражения: 27+3/(12-5)+9-(2*(12-10)+(7-6))

Мне нужны все скобки, чтобы получить подобный массив:

[(12-5),(2*(12-10)+(7-6)),(12-10),(7-6)]

Или какой-то массив в форме. Есть ли какой-нибудь простой способ сделать RegExp для этого случая? Ну, чтобы сделать что-то вроде:

const myExprStr = '27+3/(12-5)+9-(2*(12-10)+(7-6))';
const neededParenthesisArray = [...[], ...myExprStr.matchAll([some magic regexp])];

Ну наконец-то. Вопрос в том, может ли кто-нибудь поделиться со мной необходимым RegExp, или, может быть, есть какие-то документы, чтобы найти, как сделать RegExp?

1 Ответ

1 голос
/ 12 марта 2020

Предполагая, что вы сказали, что вложений будет немного. Вы можете видеть, как вещи легко взрываются. Причина в теоретических границах регулярных выражений, это тип языка, который легче анализировать, но, с другой стороны, он не предназначен для подсчета. Подбирая вложенные круглые скобки, нужно считать. Если у вас есть только три уровня, мы можем использовать трюк, но если вы хотите, чтобы go глубже, лучше использовать соответствующий синтаксический анализатор.

захватывая все круглые скобки:

\(([^()\n]*)\)

double :

\(([^()\n]*\([^()\n]*\)[^()\n]*)+\)

tripple:

\(([^()\n]*\(([^()\n]*\([^()\n]*\)[^()\n]*)+\))+[^()\n]*\)

https://regex101.com/r/n8SVYH/1

https://regex101.com/r/n8SVYH/2

https://regex101.com/r/n8SVYH/3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...