私はこのようなラインを有するの配列を返します。私はそうでした:マッチ関数は、2つの要素の代わりに1
var regex = /(\d+)/;
var str = '\/Date(1475832958000)\/';
console.log(str.match(regex));
//["1475832958000", "1475832958000"]
私は2つの要素の配列を取得します。私はなぜなのか理解していない。助けてください。
私はこのようなラインを有するの配列を返します。私はそうでした:マッチ関数は、2つの要素の代わりに1
var regex = /(\d+)/;
var str = '\/Date(1475832958000)\/';
console.log(str.match(regex));
//["1475832958000", "1475832958000"]
私は2つの要素の配列を取得します。私はなぜなのか理解していない。助けてください。
正規表現で()
はキャプチャグループを定義しているため。 match
は、位置0の全体正規表現に一致する配列を返します。その後にキャプチャグループ内で後続のエントリと一致するものが続きます。あなたはおそらく、正規表現が/^\/Date\((\d+)\)\/$/
こと、そして数として[1]
で結果を使用していた
:
var str = '/Date(1475832958000)/';
var rex = /^\/Date\((\d+)\)\/$/;
var result = str.match(rex);
if (result) {
var num = result ? +result[1] : null;
console.log("Number: " + num);
var dt = new Date(num);
console.log("Date: " + dt.toString());
}
正規表現/^\/Date\((\d+)\)\/$/
は意味:
^
を - 入力の開始\/Date\(
- リテラルテキスト/Date(
。 /
をエスケープする必要があります。そうしないと正規表現が終了するため、キャプチャグループを開始するのではなく、(
のように(
をエスケープする必要があります。(\d+)
- 1つ以上の数字をキャプチャするキャプチャグループ。\)\/
- リテラルテキスト)/
。$
- 入力の終わりサイドノート:あなたの文字列の\/
のリテラル'\/Date(1475832958000)\/'
は、それらの上にバックスラッシュは必要ちょうど/
のではありません。 '\/Date(1475832958000)\/'
と'/Date(1475832958000)/'
はまったく同じ文字列です。
正規表現()
is using for capturing groupでは、最初の要素は完全一致で、2番目の要素は取得値です。 MDN docsから
:
全体の一致結果および任意括弧捕捉一致結果を含む配列。一致するものがない場合はnull
あなただけのブラケット内の数を取得したい場合は、(バックスラッシュ、\
を追加することによって)括弧をエスケープします。
var regex = /\(\d+\)/;
var str = '\/Date(1475832958000)\/';
console.log(str.match(regex));
// or in case you just want to get the number
// then use capturing group
var regex1 = /\((\d+)\)/;
console.log(str.match(regex1));
正規表現全体を囲む '(キャプチャグループ)'があるので、そうです。 –
'str.match(regex)[0]'は正規表現の完全一致です。 'str.match(regex)[1]'はキャプチャグループの結果です。 – horcrux
ありがとうございます。 –