Сопоставить параметры функции с Regex - PullRequest
0 голосов
/ 06 марта 2020

Я создал Regex, который позволяет захватывать параметры функции.

Параметры разделяются символом ,

Вы можете иметь символ , внутри параметра типа 'lorem, impum'

Регулярное выражение возвращает только последнее совпадение.

My Regex:

\s*(\'.+\'|\".+\"|[^,]+)?(?:\s*,?\s*(\'.+\'|\".+\"|[^,]+))*

параметры функции

111111111111,'222222222',"33333333333333"

Ссылка на регулярное выражение: https://regex101.com/r/fdRJ92/2

Ответы [ 2 ]

1 голос
/ 06 марта 2020
var rx = /(?:^|,)\s*((('|").*?(?<!\\)(\3))|(\d?\.?\d+))/g;
var str = `"21312\\'\\"3123\\"", 111111111111,'222222\\'222',"333333333,33333", 1234, .123, 0.3, '454'`;
var match;
while (match = rx.exec(str)) console.log(match[1]);

Выход

"21312\'\"3123\""
111111111111
'222222\'222'
"333333333,33333"
1234
.123
0.3
'454'
0 голосов
/ 06 марта 2020

как насчет /\(?([^,\)]+)[\),]?/:

  • , совпадающих с необязательным открытием '(' (требуется для перехвата 1-го параметра) *
  • перехватывает несколько символов, которые НЕ являются (',' или ')')
  • оканчивается на ',' или a ')' (требуется для последнего параметра)

Внимание, поскольку это регулярное выражение действительно принимает только простые строки или числа. Это не сработает в строке, как упомянуто @ MonkeyZeus.

Если в предложении аргумента используются запятые, у вас возникнет проблема, поскольку регулярное выражение ищет токены, а не контекст токена (разделитель или взаимосвязь?). Вы можете попытаться обменять запятые взаимодействия с распознаваемой последовательностью, затем разделить список аргументов, а затем изменить последовательность на запятую.

Пример на https://regex101.com/r/xTkocI/1

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