2016-09-08 2 views
1

Я пытаюсь написать регулярное выражение, соответствующее каждой зависимости для углового класса 1.5. Это то, что я до сих пор:Угловые коррекции соответствия RegEx

\$inject = \[('([\w]+)'([,]?[\s]?))* 

Это то, что пара тестовых линий:

MyController.$inject = ['service1', 'service2', 'service3']; 

MyController 
    .$inject = [ 
     'service1', 
     'service2', 
     'service3', 
    ]; 

Это должно быть результатом:

match = ['service1', 'service2', 'service3']; 

Но мое регулярное выражение выше воли только выберите последний элемент: service3, и я не знаю почему. Может ли кто-нибудь помочь?

Update

Понял работает здесь: http://regexr.com/3e6c2

+0

Рассмотрите возможность использования [Esprima] (http://esprima.org), чтобы сделать совпадение проще и точнее, чем регулярное выражение. – rid

+0

Я не знал об этом парсере. Спасибо, но я хочу, чтобы это было легким. Бросая каждый файл, который я получаю через этот синтаксический анализатор, обмениваюсь проблемой интерпретации фактического файла кода для интерпретации набора результатов из этого анализатора. Я не уверен, что это принесет пользу тому, чего я пытаюсь достичь. –

ответ

1

Причина заключается в том, что, когда вы количественно захвата группы, только последний улавливается. Вы разрешаете 0-неограниченное повторение группы захвата с помощью *. Вам придется записывать их отдельно, чтобы они работали.

Для иллюстрации see this example at regex101. Здесь я повторил группу захвата три раза вместо того, чтобы иметь квантификатор, и, таким образом, все три группы получают захват.

Я также сделал некоторые из групп , не захватывая ((?:...), чтобы избежать шума в группах.

Это работает, если существует конечное число групп. Если количество групп неизвестно/велико, вам придется решать его программно.

+0

Итак, для неизвестной группы захвата я должен сделать это за два шага? Нет способа захватить список разделенных запятыми между [и]; в один шаг? –

+0

Возможно, было бы лучше сделать это вместо этого: '\ $ injection = \ [([a-zA-Z0-9 _, '\ s] +) \]', таким образом захватив все и обрезая результат с помощью замены javascript или что-то ... –

+0

Насколько мне известно. Но я немного смущен - у вас уже есть результат в массиве? Или это строка, которую вы разбираете? – ClasG

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