我想提取大括号内的文本。但复杂的是,结果中也应包括任何带有大括号}
的右花括号\
。
例如,对于字符串{abc123*-\\}}
,我想将文本提取为abc123*-\\}
。
这是到目前为止我已经完成的代码示例:
var content = '{abc123*-\\}}{sdf}';
var regex = /\{(?<text>([^\}]|(?<=\\)\})*?)\}/;
var firstMatch = content.match(regex); // results 'abc123*-\\'
答案 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+个字符}
-一个}
字符。答案 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);
这将为您提供字符串中外括号{}之间的所有字符串组。