最も簡単な解決策は、正規表現で括弧を使用して、置換で使用する元の文字列の一部をキャプチャし、それを特別なシーケンスを介して置換文字列に含めること$1
です。あなたの例のために:
'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
/^.*\/(CS[0-9]+).*$/,
'/Library/Caches/Adobe/TypeSupport/$1');
// => /Library/Caches/Adobe/TypeSupport/CS6
(複数の括弧のセットを使用できます。その場合、後続のグループは$2
、$3
などになります。気になる文字列が正規表現全体と完全に一致する場合があります。その場合$&
は、置換文字列で使用できます。かっこは必要ありません。)
これは、あなたがしているように、ソース文字列からのリテラルテキストを単に含めるのに最適です。
ただし、一致したテキストの大文字と小文字を変更しようとするなど、少し凝ったことをしている場合は、機能しません。('$1'.toLowerCase()
リテラル文字列'$ 1'を小文字に変換してからreplace
;に渡すだけです。役に立たない。)このような状況では、文字列の代わりに関数を使用できます。一致ごとに1回呼び出され、一致した文字列の部分を渡します($&
文字列バージョンと同等)。正規表現に括弧がある場合は、各グループの一致を含む追加のパラメーターが順番に渡されます。したがって、次のように例を小文字に変換できます。
'/Library/Application%20Support/Adobe/Fireworks%20CS6/Commands'.replace(
/^.*\/(CS[0-9]+).*$/,
function(whole_match, cs_number) {
return "/Library/Caches/Adobe/type_support/" + cs_number.toLowerCase()
});
// => /Library/Caches/Adobe/type_support/cs6
ここでMozillaの仕様/ドキュメントを読むことができます。