regexp在匹配后忽略一些上下文

时间:2018-06-14 03:58:10

标签: javascript regex regex-greedy

我想在javascript中解决正则表达式:

忽略}字符包装上下文的引用。 但必须匹配}字符超出引用。

例如: " Sentense {他说'你好,{某人}',她说'嗨,{某人}'得到了一些东西。"

结果: {他说'你好,{某人}',她说,嗨,{某人}' }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

上下文有点模糊,但假设您希望结果包含外部花括号内的所有内容(包括),您可以使用/{.*}/g

这可以在以下内容中看到:

var regex = /{.*}/g;
var string = 'The sentense { he said "hello, {somebody}" } got a something.';

console.log(string.match(regex)[0]);

或者如果你想抓住所有三个组件,你可以使用稍微复杂的正则表达式/({.*(?={))(.*(?<=.*}))(?:.*)}(.*)/g

打破这个局面:

  1. ({.*(?={)) - 将任何内容分组到第二个{
  2. (.*(?<=.*})) - 抓住内部花括号内的所有内容并将其分组
  3. (?:.*) - 将任何内容分组到下一个}
  4. } - 继续搜索下一个}(但不要将其分组)
  5. (.*) - 在此之后对任何内容进行分组
  6. 这可以在JavaScript中看到:

    var regex = /({.*(?={))(.*(?<=.*}))(?:.*)}(.*)/g;
    var string = 'The sentense { he said "hello, {somebody}" } got a something.';
    
    string.replace(regex, function(match, g1, g2, g3) {
      console.log(match);
      console.log(g1);
      console.log(g2);
      console.log(g3);
    });

    可以看到 Regex101 here