27

JavaScript コードの一部は次のとおりです。

num = "11222333";
re = /(\d+)(\d{3})/;
re.test(num);
num.replace(re, "$1,$2");

の文法が理解できませんでした"$1,$2"。このコードの元となった本には、$1手段RegExp.$1$2手段と書かれていますRegExp.$2。しかし、これらの説明はさらなる疑問につながります。

  1. JavaScript では、変数の名前は文字または _ で始まる必要があることが知られていますが、$1ここで RegExp のメンバー変数の有効な名前をどのように指定できるのでしょうか?

  2. を入力する$1と、コマンド ラインには定義されていないと表示されます。を入力する"$1"と、コマンド ライン$1は 11222 ではなくのみを表示し"$1,$2"ます。

ありがとうございました。

4

5 に答える 5

40

これは「変数」ではなく、.replace()呼び出しで使用されるプレースホルダーです。$n正規表現のnthキャプチャ グループを表します。

var num = "11222333";

// This regex captures the last 3 digits as capture group #2
// and all preceding digits as capture group #1
var re = /(\d+)(\d{3})/;

console.log(re.test(num));

// This replace call replaces the match of the regex (which happens
// to match everything) with the first capture group ($1) followed by
// a comma, followed by the second capture group ($2)
console.log(num.replace(re, "$1,$2"));

于 2013-05-22T23:00:09.357 に答える
7

$1 は正規表現の最初のグループで、$2 は 2 番目のグループです。グループは括弧で定義されるため、最初のグループ ($1) は (\d+) に一致するものです。正規表現が何に一致するかを理解するには、正規表現を読む必要があります。

Javascript では、変数の名前は文字または _ で始まる必要があることが知られていますが、ここで $1 を RegExp のメンバー変数の有効な名前にするにはどうすればよいでしょうか?

これは正しくありません。$ は $1 と同様に有効な変数名です。これは試してみるだけでわかります。jQuery およびその他の多数のフレームワークを参照してください。

于 2013-05-22T23:01:33.317 に答える
4

そのコード行を誤解しています。文字列は、何をすべきかを知るために関数によって内部的に使用される"$1,$2"フォーマット指定子と考える必要があります。replace2 つの結果 (括弧で囲まれた 2 つのブロック) を生成した、以前にテストされた正規表現を使用し、結果を再フォーマットします。$1最初の一致、$22 番目の一致を参照します。numしたがって、文字列の予想される内容は、11222,333このコードのビットの後にあります。

于 2013-05-22T23:00:53.800 に答える
2

Javascript では、変数の名前は文字または _ で始まる必要があることが知られています。

いいえ、ちがいます。$1は完全に有効な変数です。ただし、最初に割り当てる必要があります。

$variable = "this is a test"

これは、jQuery がオブジェクト$のエイリアスとして呼び出される変数を使用する方法です。jQuery

于 2013-05-22T23:00:39.910 に答える