2

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

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

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

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

"var foo = 'bar';"

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

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

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

是否有可用于 Ruby 的现有正则表达式解析器?是否有一个(恐怖的)已知正则表达式可以完全匹配正则表达式?有没有我没找到的宝石?

这个问题的动机是希望为这个问题找到一个简洁明了的答案

4

1 回答 1

2

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

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

于 2012-07-03T16:43:07.393 回答