JavaScript 変数定義を含むテキスト (ページの HTML) があります。
var FOREGROUND_COLOR = '#ffffff';
var BACKGROUND_COLOR = '#aaaaaa';
var BORDER_COLOR = '#000000';
のようなルビー正規表現パターンを使用して文字列の内容を一致させ/var BACKGROUND_COLOR = '(#.*?)';/
、キャプチャを置換値 ( ) に置き換えますが、新しい内容が次のようになるように、値が置き換えられた元のパターン全体#bbbbbb
を返します。
var FOREGROUND_COLOR = '#ffffff';
var BACKGROUND_COLOR = '#bbbbbb';
var BORDER_COLOR = '#000000';
主な制約は、パターンが外部ファイルで定義され、置換値がデータベースからのものであり、コンテンツ (javascript および変更したいその他の値を含む HTML ページ) が実行時に制御できないことです。したがって、パターンが定義されている場合は置換がわかりません。また、置換が定義されている場合は、パターンがわかりません。したがって、パターンと値の両方が指定されていると想定する必要があります。
単純な ruby gsub が機能しない:
contents.gsub(pattern, replacement)
=>
var FOREGROUND_COLOR = '#ffffff';
#bbbbbb // this is the problem with simple gsub
var BORDER_COLOR = '#000000';
しかし、後方参照 ( ) を使用してブロック構文を使用できるよう\1
です。しかし、パターンはすでに複雑であるため、パターンを変更する必要はありません (これは単純化されたケースであり、パターンのバリエーションを処理するには正規表現が必要です)。ハッキングして機能させることもできますが、それは賢明ではないようです。
Rubyでこれを効率的に行うにはどうすればよいですか?
追加の明確化 (回答がまだ受け入れられない理由) パターンは前もって知っていますが、それは常にフォームにあるとは限りませんvar SOMETHING = '#COLOR_VALUE';
。CSS ルール、URL、またはその他の任意のパターンである可能性があります。値X, Y and Z
とパターン/The letters of the day are (.*?), Cookie Monster/
と内容が含まれている場合
<p>Welcome to Sesame Street!</p>
<p>The letters of the day are Q, J and L, Cookie Monster. Do you like them?</p>
私の操作の後、コンテンツは
<p>Welcome to Sesame Street!</p>
<p>The letters of the day are X, Y and Z, Cookie Monster. Do you like them?</p>
7 月 11 日までの回答で一般的な解決策が得られるとは思いませんが、私が尋ねた問題には回答するかもしれません。ありがとうございました。