是否可以为包含模式的各种开启和关闭条件重用匹配的RegExp
子模式?
我有一个特定表达式X的复杂/长RegExp
子模式,我希望它存在于任何开放式语句中,定义为:${...}
,{{1} },$(...)
,$[...]
等,这些组合使得整个模式(混合开放条件不被接受,或者它本来是微不足道的。)
我想要的是避免在定义整个模式时为每个开闭条件(使用$/.../
)重复相同的长X子模式,因为它变得太长且不可读,即使它大多只是重复X子模式。
我的问题 - 这是否可以在|
语法中实现?如果是,那怎么样?
环境:ES5为0.12节点,ES6为IO.js 2.0。
P.S。严格地说,我们在这里讨论RegExp
优化,以获得更好的代码可读性,以及可能的性能。
答案 0 :(得分:2)
在一起使用时,您可以使用极其笨拙的方式匹配特定的开合括号:
\$(?:(\[)|(\()|({)|(\/)).*?(?:(?=\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
${...)
${...]
${.../
$(...}
$(...]
$(.../
$[...}
$[...)
$[.../
$/...}
$/...)
$/...]