【问题标题】:Get string enclosed in curly braces with escaping using RegEx使用正则表达式转义将字符串括在花括号中
【发布时间】:2019-08-25 20:04:45
【问题描述】:

我想提取花括号内的文本。但复杂的是,任何带有前面反斜杠 \ 的右花括号 } 也应该包含在结果中。

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

这是我目前实现的代码示例:

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

【问题讨论】:

  • 如果我的解决方案适合您,请考虑接受答案。否则,请告知尚不清楚的地方。

标签: javascript regex


【解决方案1】:

你可以使用

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

【讨论】:

  • 可以将[^] 替换为. 吗?
  • @Barun . 只找到除换行符之外的任何字符。 [^][\s\S] / [\d\D] / [\w\W] 会找到任何字符。此外,在最新的 ECMAStandard 中带有 s 标志的 . 也会这样做。
【解决方案2】:

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

示例 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2015-07-05
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多