试图弄清楚这两种情况之间的区别对我来说很奇怪
情况1:
2组比赛
var reg = /@([a-zA-Z]+)\((.*)\)/;
var text = ' @ifblank(1, @ifblank(2, 3) ) ';
text.match(reg);
结果(符合预期)
match 1: "ifblank"
match 2: "1, @ifblank(2, 3) "
情况2:
3组比赛
var reg = /@([a-zA-Z]+)\((.*), (.*)\)/;
var text = ' @ifblank(1, @ifblank(2, 3) ) ';
text.match(reg);
结果(不符合预期)
match 1: "ifblank"
match 2: "1, @ifblank(2"
match 3: "3) "
我期望的是:
match 1: "ifblank"
match 2: "1"
match 3: "@ifblank(2, 3)"
我之所以这样认为是因为我在一种格式中使用了相同的标签,但是如何创建预期的结果?
答案 0 :(得分:2)
如果您的第一个索引只有数字,即您想要的位置
比赛2:“ 1”
然后您可以将正则表达式更改为
var reg = / @([a-zA-Z] +)((\ d),(。*))/;
答案 1 :(得分:1)
对于第二组,不要使用.*
来匹配任何内容,而应使用[^,]+
来匹配除逗号以外的任何内容:
@([a-zA-Z]+)\(([^,]*), (.*)\)
^^^^
https://regex101.com/r/uyfoqq/2
如果需要,还可以通过要求匹配的最后一个字符为\S
(非空白字符)来修剪第三组末尾的空格:
@([a-zA-Z]+)\(([^,]*), (.*\S) *\)
^^ ^^