RegExp.$0~$9
と、正規表現リテラル /…/
で生成した全ての regexp
インスタンスの $0~$9
は共有されている。
したがって、
RegExp.$1 = 123;
のようにすると全ての regexp
インスタンスの $1
も変更される。
new RegExp()
で生成した RegExp
インスタンスでマッチングを行うと当該インスタンスの $0~$9
が更新される。
また同時に RegExp.$0~$9
も更新されるが、これは全ての regexp
インスタンスの $0~$9
とも共有されているのでそちらの値も更新される。
一方、
var r = new RegExp ('a'); r.$1 = 123;
のようにすると当該インスタンスの $1
だけが書き換わる。
このように、RegExp
インスタンスでは、正規表現マッチングによる $0~$9
の更新と代入式による $0~$9
の書き換えでは影響範囲が異なる。
ちなみに、regexp
インスタンスに対して
/a/.$1 = 123;
/a/ ['$1'] = 123;
といった方法はエラーになり、書き換えはできない。
RegExp.$1 = 123;
alert (/a/.$1); // 123
new RegExp ('(a)').test ('a');
alert (RegExp.$1); // a
alert (/a/.$1); // a
new RegExp ('(a)').$1 = 123;
alert (/a/.$1); // a