如何在非对称表达结束时捕获重复组

时间:2017-10-28 22:36:34

标签: javascript regex

我知道有很多关于捕捉群体的问题,我已经阅读了大约十几个但我似乎无法解决我遇到的问题。我有一个这种形式的字符串:
{{First String/Second String|{Thing1}|{Thing2}|{Thing3}|{Thing4}|}}
在第一部分是固定的但是对于{Thingx}部分,可以有从0到n的任何地方。我想最终得到一个阵列 完全匹配
第一个字符串
第二个字符串
Thing1
Thing2
Thing3
Thing4

我正在使用regex101.com进行测试。我有一个initial regex
/{{(.+?)\/(.+?)\|({.+?}\|)}}/
可以将所有{Thingx}件作为单个组捕获。然后我可以使用second regex
 /{(.*?)}\|/
打破他们。如果有一个正则表达式可以执行这两个步骤吗?

1 个答案:

答案 0 :(得分:1)

如何依赖多个匹配而不是组。您可以使用布尔OR |在一行中的正则表达式中实现它。正则表达式将是

{{([^\/]*)|\/(.*?)\||{(.*?)}

一个完整的例子可能是这样的



var str = '{{First String/Second String|{Thing1}|{Thing2}|{Thing3}|{Thing4}|}}';
var myRegexp = /{{([^\/]*)|\/(.*?)\||{(.*?)}/g;
var match = myRegexp.exec(str);
while (match != null) {
  if (typeof match[1] != 'undefined') console.log(match[1])
  if (typeof match[2] != 'undefined') console.log(match[2])
  if (typeof match[3] != 'undefined') console.log(match[3])
  console.log("---------------------------");
  match = myRegexp.exec(str);
}