使用RegEx转义以大括号括起来的字符串

时间:2019-04-04 06:57:25

标签: javascript regex

我想提取大括号内的文本。但复杂的是,结果中也应包括任何带有大括号}的右花括号\

例如,对于字符串{abc123*-\\}},我想将文本提取为abc123*-\\}

这是到目前为止我已经完成的代码示例:

var content = '{abc123*-\\}}{sdf}';
var regex = /\{(?<text>([^\}]|(?<=\\)\})*?)\}/;
var firstMatch = content.match(regex); // results 'abc123*-\\'

2 个答案:

答案 0 :(得分:2)

您可以使用

var content = '{abc123*-\\}}{sdf}';
var regex = /\{([^\\{}]*(?:\\[^][^\\{}]*)*)}/;
var firstMatch = content.match(regex); // results 'abc123*-\\'
if (firstMatch) {
  console.log(firstMatch[1]);  // => abc123*-\}
}

详细信息

  • \{-一个{字符
  • ([^\\{}]*(?:\\[^][^\\{}]*)*)-捕获组1:
    • [^\\{}]*-除\{}之外的0+个字符
    • (?:\\[^][^\\{}]*)*-重复0次或更多次
      • \\[^]-任何转义的字符(\后跟任何字符)
      • [^\\{}]*-除\{}之外的0+个字符
  • }-一个}字符。

请参见regex demoRegulex graph

enter image description here

答案 1 :(得分:0)

找到了适用于深层嵌套花括号的解决方案,

示例1,

var content = '{abc123*-\\}}{sdf}';
var regex = /(?<=\{)(.*?)((?=(?=\}\}))(?=\}).(?!\}{2})|(?!(?=\}\}))(?=\}))/g;
var firstMatch = content.match(regex); 
console.log(firstMatch);

示例2,

var content = '{{{abc123*-\\}}}}{sdf}}}}}}';
var regex = /(?<=\{)(.*?)((?=(?=\}\}))(?=\}).(?!\}{2})|(?!(?=\}\}))(?=\}))/g;
var firstMatch = content.match(regex); 
console.log(firstMatch);

这将为您提供字符串中外括号{}之间的所有字符串组。