我试图写一个正则表达式匹配一个角度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。在这里,我重复了捕获组三遍,而不是使用量词,因此所有三个组都被捕获。

我还使某些组不捕获((?:...),以避免组中产生噪音。

如果组的数量有限,则此方法有效。如果组的数量未知/太大,则必须以编程方式解决。

09-13 10:15