我的正则表达式如下
/({{(?:(?:(?:for|if|while):\w+)|(?:do))}})|(?:{{(?:fi|endfor|dowhile:\w+)}})/g
我的示例输入如下
This is a sample {{if:val2}}abc{{fi}} injection{{while:val3}} {{endwhile}} string {{for:val}}repeated text{{endfor}} asdb lasdfk {{do}} basdf {{dowhile:val4}} asldf lkjasdf lajsdf aljsdf lkjasdf lasdf.
它匹配如下
我希望所有其他不匹配的文本作为组。
我可以使用regex的RegExp.exec和lastIndex值来执行此操作,以使用javascript创建组。
但是,有什么方法可以使用RegExp本身来实现?
最佳答案
将模式中的所有捕获组转换为非捕获组后,可以使用String#split
:
s.split(/{{(?:(?:for|if|while):\w+|do|endwhile)}}|{{(?:fi|endfor|dowhile:\w+)}}/)
如果保留捕获组,它将与匹配的部分一起输出。
JS演示:
var s = 'This is a sample {{if:val2}}abc{{fi}} injection{{while:val3}} {{endwhile}} string {{for:val}}repeated text{{endfor}} asdb lasdfk {{do}} basdf {{dowhile:val4}} asldf lkjasdf lajsdf aljsdf lkjasdf lasdf.';
var rx = /{{(?:(?:for|if|while):\w+|do|endwhile)}}|{{(?:fi|endfor|dowhile:\w+)}}/;
console.log(
s.split(rx)
)
// Getting rid of blank items and trim:
console.log(
s.split(rx)
.filter(function (x) { return x.trim() != ""; })
.map(function (x) { return x.trim(); })
)
关于javascript - 如何从非捕获组中获取文本的所有不匹配部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57326413/