Javascript 用于拆分字符串的复杂正则表达式

Javascript 用于拆分字符串的复杂正则表达式,javascript,regex,string,Javascript,Regex,String,我需要一些关于regex难题的帮助。我仍在努力解决这一切——显然不是专家 假设我有这样一个复杂的字符串: {something:here}{examp.le:!/?foo|bar}BLAH|{something/else:here}:{and:here\\}(.)} 首先,我想使用管道将字符串拆分为一个数组,因此它实际上类似于: {something:here}{examp.le:!/?foo|bar}BLAH 及 但请注意,在花括号中有一个管道可以忽略。。。所以需要计算出这个的正则表达式。

我需要一些关于regex难题的帮助。我仍在努力解决这一切——显然不是专家

假设我有这样一个复杂的字符串:

{something:here}{examp.le:!/?foo|bar}BLAH|{something/else:here}:{and:here\\}(.)}
首先,我想使用管道将字符串拆分为一个数组,因此它实际上类似于:

{something:here}{examp.le:!/?foo|bar}BLAH

但请注意,在花括号中有一个管道可以忽略。。。所以需要计算出这个的正则表达式。我最初使用的是indexOf,但因为我现在必须考虑到曲括号内的管道,这使事情变得复杂

还没结束呢!然后,我还需要将每个字符串按花括号内的内容和非花括号内的内容分开。因此,我最终得到了两个数组,其中包含:

阵列1

{something:here}
{examp.le:!/?foo|bar}
BLAH
阵列2

{something/else:here}
:
{and:here\\}(.)}
我在第一个结束的花括号前加了一个双斜杠,表示忽略这个。但无法找出执行此操作的正则表达式

有人能帮忙吗?

找到所有出现的“大括号中的字符串”或“仅字符串”,然后迭代找到的子字符串并在遇到管道时拆分

str = "{something:here}{examp.le:!/?foo|bar}BLAH|{something/else:here}:{and:here\\}(.)}"

var m = str.match(/{.+?}|[^{}]+/g)
var r = [[]];
var n = 0;
for(var i = 0; i < m.length; i++) {
   var s = m[i];
   if(s.charAt(0) == "{" || s.indexOf("|") < 0)
       r[n].push(s);
   else {
      s = s.split("|");
      if(s[0].length) r[n].push(s[0]);
      r[++n] = [];
      if(s[1].length) r[n].push(s[1]);
   }
}

干杯,青蛙。我喜欢这种方法:)我想差不多了。似乎在最初将字符串拆分为“m”数组时,并没有忽略前面有\\的大括号。有什么办法可以做到这一点吗?修改后的正则表达式行缺少结尾“)“你是个天才伙伴。正是我想要的:)非常感谢。我用这个做了很多令人头疼的事!
str = "{something:here}{examp.le:!/?foo|bar}BLAH|{something/else:here}:{and:here\\}(.)}"

var m = str.match(/{.+?}|[^{}]+/g)
var r = [[]];
var n = 0;
for(var i = 0; i < m.length; i++) {
   var s = m[i];
   if(s.charAt(0) == "{" || s.indexOf("|") < 0)
       r[n].push(s);
   else {
      s = s.split("|");
      if(s[0].length) r[n].push(s[0]);
      r[++n] = [];
      if(s[1].length) r[n].push(s[1]);
   }
}
  var m = str.match(/{?(\\.|[^{}])+}?/g