web-dev-qa-db-ja.com

Javascript置換メソッド、「$ 1」で置換

私はSitepoints 2007の本「Simply Javascript」を読んでいますが、理解できないコードに出会いました。

次のコードです。

Core.removeClass = function(target, theClass)
{
    var pattern = new RegExp("(^| )" + theClass + "( |$)");
    target.className = target.className.replace(pattern, "$1");
    target.className = target.className.replace(/ $/, "");
};

Replaceメソッドの最初の呼び出しは、私を困惑させるものです。「$ 1」の値がどこから来るのか、またはそれが何を意味するのかがわかりません。 思考呼び出しは見つかったパターンを ""で置き換えるべきだと思います。

42
Niels Bom

最初の文字が( *でない括弧の各ペア)...?は「キャプチャグループ」であり、置換パターンで使用できる結果を$1$2$3などに配置します。

また、他の正規表現エンジンで\1\2\3と同じものが表示される場合があります(繰り返しのために、実際には元の式で表示されることもあります)

これらは一般に式の(以前の)部分を参照するため、「後方参照」と呼ばれます。

(* ?は、(?:...)である非キャプチャーグループや、キャプチャーせずに単にグループ化するなど、さまざまな形式の特別な動作を示します。)


特定の例では、$ 1はグループ(^| )になります。これは「文字列の開始位置(幅がゼロ)または単一のスペース文字」です。

したがって、式全体をそれで置き換えることにより、基本的に変数theClassとその後のスペースを削除することになります。 (終了式( |$)は逆(スペースまたは文字列の終了位置)であり、その値は使用されないため、代わりに(?: |$)でキャプチャされない可能性があります。)


うまくいけば、これですべてがわかります。詳細が必要な場合はお知らせください。

また、サイト regular-expressions.info からのさらなる読み物もあります。

60
Peter Boughton

$ 1は後方参照です。正規表現の最初に一致するグループ(括弧のセット)が一致するものに置き換えられます。

9
Dagg Nabbit