是否可以为包含模式的各种打开和关闭条件重用匹配的 RegExp
子模式?
对于某个表达式 X,我有一个复杂/长的 RegExp
子模式,我希望它驻留在任何打开-关闭语句中,定义为:${.. .
、$(...)
、$[...]
、$/.../
等., 结合起来构成了整个模式(不接受混合打开-关闭条件,否则这将是微不足道的)。
我想要的是在定义整个模式时避免为每个开闭条件(使用 |
)重复相同的长 X 子模式,因为它变得太长且不可读,尽管它主要只是重复的 X 子模式。
我的问题 - 这可以在 RegExp
语法中实现吗?如果是,那么如何?
环境:ES5 的 Node 0.12 和 ES6 的 IO.js 2.0。
附言严格来说,我们在这里讨论的是 RegExp
优化,以提高代码可读性,并可能提高性能。
最佳答案
当一起使用时,您可以使用一种非常 hacky 的方式来匹配特定的左大括号和右大括号:
\$(?:(\[)|(\()|({)|(\/)).*?(?:(?=\2)(?=\3)(?=\4)\]|(?=\1)(?=\3)(?=\4)\)|(?=\1)(?=\2)(?=\4)}|(?=\1)(?=\2)(?=\3)\/)
^^^ Inner Match Here
它基本上会查找除一个特定组之外的所有组为空,并且碰巧只能在 JavaScript 正则表达式中工作。上面代码中指出的.*?
部分只需要在大括号内替换为要匹配的正则表达式即可匹配任意模式。
演示:https://regex101.com/r/aX7rH1/1
// Matches
${...}
$(...)
$[...]
$/.../
// Does Not Match
${...)
${...]
${.../
$(...}
$(...]
$(.../
$[...}
$[...)
$[.../
$/...}
$/...)
$/...]
关于javascript - 针对不同的开闭条件重用 RegExp 子模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30281916/