javascript - 正则表达式可匹配括号之间的任何内容(引号除外)

标签 javascript regex

有没有人知道用正则表达式在括号之间的字符串中查找任何内容的最佳方法(引号除外)。例:

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

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

/\{([^}]+)\}/g

编辑:

对于那些迄今为止提供了潜在解决方案的人,我表示感谢。对于那些对此表示歉意表示怀疑的人,它很快就被开除,目的是要重新进行编辑。

鉴于以下情况:
var str1 = 'Lorem ipsum dolor {sit} amet, consectetur {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';

预期结果:{sit}和{adipiscing}匹配
var str2 = 'Lorem "ipsum "dolor {sit} amet", consectetur" {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';

预期结果:{sit}和{adipiscing}匹配(因为两者都不在开引号之间)
var str3 = 'Lorem ipsum "dolor {sit} amet", consectetur {adipiscing} elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua';

预期结果:{adipiscing}

为了清楚起见,术语“引号”仅是引号,而不是撇号。

最佳答案

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

"{[^{}]*}"|\{([^}]+)\}

Regex demo

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]);
  }
}


另一种选择是也可以在开头匹配一个"或在结尾匹配一个",以在使用单引号引起来时不捕获该组。
"{[^{}]+}"?|{[^{}]+}"|{([^{}]+)}

Regex demo

在部分
  • "{[^{}]+}"?从打开"{到关闭}和可选的"
  • 匹配
  • |
  • {[^{}]+}"从打开{到关闭}"
  • 匹配
  • |
  • {比赛开幕式{
  • ([^{}]+)捕获组1,匹配除{}
  • 之外的任何字符的1+倍
  • }比赛结束}


  • const regex = /"{[^{}]+}"?|{[^{}]+}"|{([^{}]+)}/g;
    const strings = [
      '{string between braces}',
      '"{string between braces 2}"',
      '"{string between braces 3}',
      '{string between braces 4}"',
      'start"{str5}"{str6}"end'
    ].forEach(s => {
      let m;
    
      while ((m = regex.exec(s)) !== 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]);
        }
      }
    });

    关于javascript - 正则表达式可匹配括号之间的任何内容(引号除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437931/

    相关文章:

    python - 如何修改与 Python 中特定正则表达式匹配的文本?

    javascript - 使用 ng2-file-upload 进行 Angular2+ 文件上传 - 子组件不断调用父组件函数

    javascript - 函数什么时候应该在 hapijs 路由调用中返回

    javascript - 交换两个水平对齐的 div

    javascript - 发送电子邮件至,然后在 javascript 中重定向

    html - 如何在输入元素的 HTML 模式属性中设置 RegEx 全局标志?

    java - 正则表达式在java中不起作用

    javascript - jQuery - val 不刷新输入/UI slider 中的数据

    java - 改进在行开头匹配 {m,n}|{m,}|{,n}|{n} 的正则表达式

    java - 正则表达式匹配正斜杠之后或中间的单词