私は文字列内の数字にマッチするJavaScriptの正規表現を使用しています。Javascriptの正規表現とparseInt
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2);
は、私はそれが'foo2 bar5.4'
返すようにしたいが、それは私がここで間違ってやっている何'fooNaN barNaN'
返しますか?
私は文字列内の数字にマッチするJavaScriptの正規表現を使用しています。Javascriptの正規表現とparseInt
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2);
は、私はそれが'foo2 bar5.4'
返すようにしたいが、それは私がここで間違ってやっている何'fooNaN barNaN'
返しますか?
parseInt('$1', 10) * 2
が最初に実行され、結果がreplace
に渡されます。あなたは、コールバック関数を使用したい:
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function(match, number) {
return +number * 2;
});
さらに、parseInt
は任意の浮動小数点値を切り捨てますので、結果は"foo2 bar4"
だろう。その代わりに、単項プラスの演算子を使用して、数値文字列を数値に変換することができます。
parseInt('$1', 10) * 2
の結果は、文そのものではなくreplace
関数に渡しています。代わりに
、あなたはパスそうのようなreplace
に機能することができます
'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function (str) {
return parseInt(str, 10) * 2;
});
は、詳細情報については、String.replace
注意をパラメータとして関数を渡すことにMDC articleを読んでいるあなたはより多くを持っている場合1つのグループよりも、次のようなことができます:
"p-622-5350".replace(/p-(\d+)-(\d+)/, function (match, g1, g2) {
return "p-" + (+g1 * 10) + "-" + (+g2 *10);
});
(関数内の余分なパラメータに注意してください)
Huh .. '+ number'?なぜあなたは '+ number'を使用しますか、説明してください、どうもありがとう。 – LiuwkCn
最後の文で説明する必要があります。* "代わりに、単項演算子を使用して任意の数値文字列を数値に変換できます。" * –
ありがとう! short.exe、hahにコメントしてください。 :) – LiuwkCn