2016-11-06 2 views
-1

Я ищу, чтобы создать выражение регулярных выражений, которые будут анализировать строку функций, как правило, глядя, как это:Regex строка синтаксического анализа расслоение плотной функций

" a b ()  c d (1, 2) text(' asdf sg sf sd sdf ') " 

в массив со всеми пробелами удалены для пространств внутри, кроме как одиночные или двойные кавычки. IE, что-то вроде этого:

['a','b()','c','d(1,2)',"text(' asdf sg sf sd sdf ')"] 

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

Любая помощь будет оценена!

+0

Пожалуйста, напишите, что вы пробовали до сих пор. – Tibrogargan

+0

Извините, я оставил кавычки в массиве. Я имел в виду: ['a', 'b()', 'c', 'd (1,2)', "text ('asdf sg sf sd sdf')"] – dph987

+0

, поэтому отредактируйте ответ и исправьте его – Dekel

ответ

0

Просто сказать, что вы имеете в виду - последовательность букв (\w+), возможно (?), а затем какое-то белое пространство (\s*) и что-то в скобках (\(.*?\):

var str = " a b ()  c d (1, 2) text(' asdf sg sf sd sdf ') "; 
 

 
var re = /\w+(\s*\(.*?\))?/g; 
 
//  ^^^      IDENTIFIER 
 
//    ^^^^^^^   ARGLIST 
 

 
// Remove spaces in each result, except for spaces in "string literals" like 'a b'. 
 
function squeeze(str) { 
 
    return str.replace(/'.*?'| /g, match => match === ' ' ? '' : match); 
 
} 
 

 
console.log(str.match(re).map(squeeze));

Это не может обрабатывать вызовы вложенных функций. Это, вероятно, почти невозможно с помощью regexp.

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