RegExp子模式重用的不同的开闭条件?

是否有可能重用一个匹配的RegExp子模式的包含模式的各种打开和closures条件?

对于某个expression式X,我有一个复杂的/长的RegExp子模式,我希望这个模式存在于任何一个打开closures语句中,定义为: ${...}$(...)$[...]$/.../等,这些组合使得整个模式(混合开闭条件不被接受,或者它将是微不足道的)。

我想要避免在定义整个模式时为每个开关条件(使用| )重复相同的长X子模式,因为它变得太长而且不可读,即使它大部分只是重复X个子模式,模式。

我的问题 – 在RegExp语法中可以实现吗? 如果是,那么如何?

环境:ES5的节点0.12,ES6的IO.js 2.0。

PS严格地说,我们正在谈论RegExp优化,以获得更好的代码可读性,以及可能的性能。

在一起使用时,您可以使用非常不寻常的方式匹配特定的开启和closures括号:

 \$(?:(\[)|(\()|({)|(\/)).*?(?:(?=\2)(?=\3)(?=\4)\]|(?=\1)(?=\3)(?=\4)\)|(?=\1)(?=\2)(?=\4)}|(?=\1)(?=\2)(?=\3)\/) ^^^ Inner Match Here 

它基本上查找所有组,除了一个特定的一个是空的,碰巧只能在JavaScript正则expression式。 .*? 在上面的代码中指出的部分只需要用大括号内的正则expression式来replace,以匹配任意的模式。

演示: https : //regex101.com/r/aX7rH1/1

 // Matches ${...} $(...) $[...] $/.../ // Does Not Match ${...) ${...] ${.../ $(...} $(...] $(.../ $[...} $[...) $[.../ $/...} $/...) $/...]