正则表达式匹配大括号之间的任何内容,但引用时除外

Jon*_*lby 2 javascript regex

有谁知道使用正则表达式在大括号之间的字符串中查找任何内容的最佳方法,除非被引用。例子:

这是{string between braces}模式应该匹配的我,但这"{string between braces}"应该被忽略。

这个正则表达式会让我在大括号之间得到任何东西......

/\{([^}]+)\}/g
Run Code Online (Sandbox Code Playgroud)

编辑:

对于那些迄今为止提供了潜在解决方案的人,我感谢你们。对于那些质疑这一点含糊不清的人,抱歉,它很快就被解雇了,打算回来编辑。

鉴于以下场景:

var str1 = 'Lorem ipsum dolor {sit} amet, consectetur {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
Run Code Online (Sandbox Code Playgroud)

预期结果:{sit} 和 {adipiscing} 匹配

var str2 = 'Lorem "ipsum "dolor {sit} amet", consectetur" {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
Run Code Online (Sandbox Code Playgroud)

预期结果:{sit} 和 {adipiscing} 匹配(因为两者都不在双引号之间)

var str3 = 'Lorem ipsum "dolor {sit} amet", consectetur {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';
Run Code Online (Sandbox Code Playgroud)

预期结果:{adipiscing}

为了清楚起见,在引号方面,我们只谈论引号,而不是撇号。

The*_*ird 5

一种选择是,以匹配所有以开头的字符串所"{...}"使用,并捕获替代交替组中

"{[^{}]*}"|\{([^}]+)\}
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

另一种选择是匹配"开头的 a 或"结尾的a以在具有单双引号时不捕获组。

"{[^{}]+}"?|{[^{}]+}"|{([^{}]+)}
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

在零件中

  • "{[^{}]+}"?匹配从开始"{到结束}和可选"
  • | 或者
  • {[^{}]+}"从首场比赛{,直到关闭}"
  • | 或者
  • { 比赛开场 {
  • ([^{}]+)捕获组 1,匹配 1+ 次除{or之外的任何字符}
  • } 比赛结束 }

const regex = /"{[^{}]*}"|\{([^}]+)\}/g;
const str = `{string between braces}
"{string between braces 2}"
`;
let m;

while ((m = regex.exec(str)) !== null) {
  // This is necessary to avoid infinite loops with zero-width matches
  if (m.index === regex.lastIndex) {
    regex.lastIndex++;
  }
  if (m[1]) {
    console.log(m[1]);
  }
}
Run Code Online (Sandbox Code Playgroud)