如何从非捕获组中获取所有不匹配的文本部分

约翰·彼得

我的正则表达式如下

/({{(?:(?:(?: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. 

它匹配如下

在此处输入图片说明

我希望所有其他不匹配的文本作为组。

我可以使用regexRegExp.execlastIndex来执行此操作,以使用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(); })
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

获取Java中所有捕获的组

如何使用Java中的Matcher获取不匹配的组?

如何仅捕获匹配字符串的一部分?非捕获组

JS Regex多个捕获组返回所有匹配项

正则表达式:如何获取字符串中组的所有匹配项

正则表达式-捕获匹配之间的文本,如果不匹配,则捕获所有

如何提取组中的所有匹配项

Perl / Sed用小写版本替换捕获组中的所有匹配项

突出显示QPlainTextEdit中的文本部分

如何在PHP中获取所有带有匹配文本的行

如何按组获取所有变量的所有非NA值的计数?

如何匹配正则表达式捕获组之后但仅直到下一个重复匹配的所有文本?

捕获每个组的所有文本

匹配双引号,多个捕获组之间的所有内容

如何在不考虑Ruby中的组的情况下获取所有正则表达式匹配项?

我需要匹配组中的所有字符,只要它们与某个单词不匹配

如何用动态组替换所有匹配的文本?

如何使用indexof和substring或HtmlAgilityPack从文本部分获取数字?

尝试用相反的匹配捕获组替换熊猫数据帧中与模式匹配的所有值

如何构建正则表达式以捕获所有可能的匹配组

使用 Python 中的正则表达式提取具有开始和结束匹配的字符串文本部分

PHP IMAP 如何只获取正文的文本部分?不是不同的 <html> 标签等

获取 xml 节点的纯文本部分

PostgreSQL - 从文本数组中获取所有子组

如何获取捕获组的所有匹配迭代

多次匹配非捕获组

获取与 findall 匹配的所有捕获组

正则表达式组不会捕获字符串的所有匹配部分

如何在 javafx 中隐藏或关闭文本部分