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 に答える