javascript - 针对不同的开闭条件重用 RegExp 子模式?

标签 javascript regex node.js

是否可以为包含模式的各种打开和关闭条件重用匹配的 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/

相关文章:

javascript - React.js 和 ES2015 - 将方法从父级传递给子级

javascript - 在父 div 的 css 子容器前面定位 z-index 问题?

javascript - 我必须在元素上注册哪种事件类型才能跟踪添加子元素

ruby 正则表达式匹配多次出现的模式

javascript - Facebook 页面发布时的 Node.js 事件

javascript - 使用展开运算符将属性添加到对象

java - 需要正则表达式来匹配android 4.2.1及以上版本

javascript - 正则表达式替换换行符和逗号

javascript - 有没有办法在没有await关键字的情况下调用sleep()?

javascript - fatal error : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory when processing large files with fs