我试图写一个正则表达式匹配一个角度1.5类的每个依赖项。这是我到目前为止所得到的:
\$inject = \[('([\w]+)'([,]?[\s]?))*
这是几条测试线:
MyController.$inject = ['service1', 'service2', 'service3'];
MyController
.$inject = [
'service1',
'service2',
'service3',
];
结果应该是:
match = ['service1', 'service2', 'service3'];
但是我上面的正则表达式只会获取最后一个项目:
service3
,我不知道为什么。有人可以帮忙吗?更新资料
在这里工作了:http://regexr.com/3e6c2
最佳答案
原因是当您量化捕获组时,仅捕获最后一个。您可以使用*
允许捕获组的0无限次重复。您必须单独捕获它们才能起作用。
例如,see this example at regex101。在这里,我重复了捕获组三遍,而不是使用量词,因此所有三个组都被捕获。
我还使某些组不捕获((?:...
),以避免组中产生噪音。
如果组的数量有限,则此方法有效。如果组的数量未知/太大,则必须以编程方式解决。