Javascript 角正则匹配注入
我试图为angular 1.5类编写一个匹配每个依赖项的正则表达式。到目前为止,我得到的是:Javascript 角正则匹配注入,javascript,regex,Javascript,Regex,我试图为angular 1.5类编写一个匹配每个依赖项的正则表达式。到目前为止,我得到的是: \$inject = \[('([\w]+)'([,]?[\s]?))* 这是一对测试线: MyController.$inject = ['service1', 'service2', 'service3']; MyController .$inject = [ 'service1', 'service2', 'service3',
\$inject = \[('([\w]+)'([,]?[\s]?))*
这是一对测试线:
MyController.$inject = ['service1', 'service2', 'service3'];
MyController
.$inject = [
'service1',
'service2',
'service3',
];
结果应该是:
match = ['service1', 'service2', 'service3'];
但是我上面的正则表达式将只获取最后一项:service3
,我不知道为什么。有人能帮忙吗
更新
让它在这里工作:原因是当你量化一个捕获组时,只捕获最后一个。您可以使用
*
对捕获组进行0次无限制的重复。您必须单独捕获它们才能使其工作
举例来说。在这里,我将捕获组重复了三次,而没有使用量词,因此所有三个组都被捕获
我还将一些组设置为非捕获((?:…
)以避免组中出现噪音
如果组的数量有限,则可以使用此方法。如果组的数量未知/太多,则必须以编程方式解决此问题。考虑使用此方法使匹配比正则表达式更简单、更精确。我不知道此解析器。谢谢,但我希望此方法是轻量级的。通过此解析器获取的每个文件都将将解释实际代码文件的麻烦与解释来自此解析器的结果集的麻烦交换。我不确定这是否会为我试图实现的目标带来价值。因此,对于未知的捕获组,我必须分两步执行此操作?无法捕获[和]之间以逗号分隔的列表;在一个步骤中?也许这样做会更好:
\$inject=\[([a-zA-Z0-9\',\s]+)\]
,从而捕获所有内容,并使用javascript替换或其他方法修剪结果…据我所知。但我有点困惑-您是否已经在数组中拥有结果?或者您正在解析的是字符串?我正在解析整个javascript代码文件。试图检索文件中包含的内容。这是针对我正在编写的节点脚本.好的。我想你应该分两步来做-首先找到[]
(例如/\[([^]*)\]/
)之间的数据,然后找到字符串。将引号中的独立项匹配/'[^']*'/g
,然后将它们放在一个数组中。