Javascript: разделенная строка с пробелом, если она не заключена в круглые скобки, одинарные кавычки или квадратные скобки - PullRequest
0 голосов
/ 12 января 2020

Мой подход: https://regex101.com/r/vyKG1j/1

[\s]+(?!([^[]*])|([^\(]*\)))

К сожалению, у этого есть проблемы с инкапсулированными скобками, например: (ab (c d)), и я не смог реализовать поиск апострофа.

Пример: "a b (a (a b)) [a b c d] 'test string' (a b)"
Желаемые результаты: ["a", "b", "(a (a b))", "[a b c d]", "'test string'", "(a b)"]

Было бы лучше, если бы он мог обрабатывать что-то подобное.

Пример: "a b abcd(a b)"
Желаемые результаты: ["a", "b", "abcd(a b)"]

Является ли регулярное выражение лучшим подходом здесь?

1 Ответ

1 голос
/ 12 января 2020

Вопрос к себе, чтобы узнать, можно ли что-то решить с помощью регулярных выражений, - Can I draw a finite automata (state machine) for this problem. Помните, что у автоматов нет возможности хранения.

Теперь давайте посмотрим на подстроку, которая имеет здесь вложенную структуру из вашего примера: (a (a b))

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

И вот почему этот шаблон строки не может быть анализируется с использованием just только регулярного выражения.

И для этой проблемы, в частности, поскольку она настолько проста, я просто перебрал бы строку, сохраняя стек, чтобы отслеживать скобки, и символы кавычек, чтобы разобрать его сам .

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