正则表达式和反向匹配组不匹配组

时间:2016-08-28 15:25:22

标签: javascript regex node.js

无论如何都要将群组反转到非捕获群体,反之亦然?

例如我们有这个:

(a(bc(def)gh)ijk)

我们需要为此做一些魔术:

(?:a(?:bc(?:def)gh)ijk)

当然有一些魔法可以找到打开/左括号并替换它们(?:应该有效,对吗?不...考虑这个:

(a(bc(d[(e]f)gh)ijk)

现在我们内置了[(e],这意味着可以有一个字符(e

我们的替换算法将如何处理它?<​​/ p>

(?:a(?:bc(?:d[(?:e]f)gh)ijk)

他不应该将[(e]更改为[(?:e]

我所说的算法是另一个正则表达式:

/(\()(?!\?\:)/gi;

用于找到尚未?:的左括号。

首先搜索这些括号,然后检查每个括号是否为前缀\,因为我们不想更改转义左括号,最后用(?:替换它们

现在..如何处理这些括号... [abc(]

1 个答案:

答案 0 :(得分:1)

我正在使用的正则表达式匹配转义括号和任何字符集。然后它捕获任何剩余的组。它排除了负面比赛。它还可以捕获组是否正在捕获。

var input = /(a(?:bc(d[(e]f)gh)i\(jk[(?!lmnop])/;
var find = /\\\(|\[[^\]]*\]|(\((?!\?!)(?:)?)/g;

input.source.replace(find, function(match, group, capturing) {
  if (group) {
    if (capturing) { return "(?:"; }
    else /* non-capturing */ { return "("; } 
  }
  return match;
});