Tokenize(lex?parse?)正则表达式

使用Ruby我想要一个Regexp对象(或一个表示有效正则表达式的字符串;您的选择)并对其进行标记以便我可以操作某些部分。

具体来说,我想采用这样的正则表达式/字符串:

regex = /var (\w+) = '([^']+)';/ parts = ["foo","bar"] 

并创建一个替换字符串,用数组中的文字替换每个捕获:

 "var foo = 'bar';" 

一种天真的基于正则表达式的解析正则表达式的方法,例如:

 i = -1 result = regex.source.gsub(/\([^)]+\)/){ parts[i+=1] } 

…对于嵌套捕获组或非捕获组或在字符类中具有括号的正则表达式等内容将失败。 因此,我希望将正则表达式正确地分解为语义上有效的部分。

是否有适用于Ruby的现有Regex解析器? 是否有(恐怖的恐怖)已知正则表达式与正则表达式完全匹配? 有没有我找不到的gem?

这个问题的动机是希望找到一个简洁的答案来解决这个问题 。

我在GitHub上有一个JavaScript项目叫做: Dynamic(?:Regex Highlighting)++ with Javascript! 你可能想看看。 它解析以自由间隔和非自由间隔模式编写的PCRE兼容正则表达式。 由于正则表达式是用function较少的JavaScript语法编写的,因此这些正则表达式可以很容易地转换为Ruby。

请注意,正则表达式可能包含任意嵌套的括号结构,而JavaScript没有递归的正则表达式function,因此代码必须从内到外解析嵌套的parens树。 它有点棘手,但效果很好。 请务必在荧光笔演示页面上进行试用 ,您可以在其中输入并动态突出显示任何正则表达式。 这里记录了用于解析正则表达式的JavaScript正则表达式。