2011-10-18 11 views
10

私は文字列内の数字にマッチするJavaScriptの正規表現を使用しています。Javascriptの正規表現とparseInt

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, parseInt('$1', 10) * 2); 

は、私はそれが'foo2 bar5.4'返すようにしたいが、それは私がここで間違ってやっている何'fooNaN barNaN'

返しますか?

答えて

16

parseInt('$1', 10) * 2が最初に実行され、結果replaceに渡されます。あなたは、コールバック関数を使用したい:

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function(match, number) { 
    return +number * 2; 
}); 

さらに、parseIntは任意の浮動小数点値を切り捨てますので、結果は"foo2 bar4"だろう。その代わりに、単項プラスの演算子を使用して、数値文字列を数値に変換することができます。

+0

Huh .. '+ number'?なぜあなたは '+ number'を使用しますか、説明してください、どうもありがとう。 – LiuwkCn

+1

最後の文で説明する必要があります。* "代わりに、単項演算子を使用して任意の数値文字列を数値に変換できます。" * –

+0

ありがとう! short.exe、hahにコメントしてください。 :) – LiuwkCn

1

parseInt('$1', 10) * 2の結果は、文そのものではなくreplace関数に渡しています。代わりに

、あなたはパスそうのようなreplaceに機能することができます

'foo1 bar2.7'.replace(/(\d+\.?\d*)/g, function (str) { 
    return parseInt(str, 10) * 2; 
}); 

は、詳細情報については、String.replace

0

注意をパラメータとして関数を渡すことにMDC articleを読んでいるあなたはより多くを持っている場合1つのグループよりも、次のようなことができます:

"p-622-5350".replace(/p-(\d+)-(\d+)/, function (match, g1, g2) { 
    return "p-" + (+g1 * 10) + "-" + (+g2 *10); 
}); 

(関数内の余分なパラメータに注意してください)