私は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」の値がどこから来るのか、またはそれが何を意味するのかがわかりません。 思考呼び出しは見つかったパターンを ""で置き換えるべきだと思います。
最初の文字が(
*でない括弧の各ペア)
...?
は「キャプチャグループ」であり、置換パターンで使用できる結果を$1
、$2
、$3
などに配置します。
また、他の正規表現エンジンで\1
、\2
、\3
と同じものが表示される場合があります(繰り返しのために、実際には元の式で表示されることもあります)
これらは一般に式の(以前の)部分を参照するため、「後方参照」と呼ばれます。
(* ?
は、(?:
...)
である非キャプチャーグループや、キャプチャーせずに単にグループ化するなど、さまざまな形式の特別な動作を示します。)
特定の例では、$ 1はグループ(^| )
になります。これは「文字列の開始位置(幅がゼロ)または単一のスペース文字」です。
したがって、式全体をそれで置き換えることにより、基本的に変数theClass
とその後のスペースを削除することになります。 (終了式( |$)
は逆(スペースまたは文字列の終了位置)であり、その値は使用されないため、代わりに(?: |$)
でキャプチャされない可能性があります。)
うまくいけば、これですべてがわかります。詳細が必要な場合はお知らせください。
また、サイト regular-expressions.info からのさらなる読み物もあります。
$ 1は後方参照です。正規表現の最初に一致するグループ(括弧のセット)が一致するものに置き換えられます。