web-dev-qa-db-ja.com

JavaScriptで文字列の最初の整数を取得する

ループ内に文字列があり、すべてのループについて、次のようなテキストで満たされています。

"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"

文字列のテキストまでの最初の数値のみを取得したいのですが、もちろん長さがわかりません。

前もって感謝します!

35
Fred

数値が文字列の先頭にある場合:

("123 hello everybody 4").replace(/(^\d+)(.+$)/i,'$1'); //=> '123'

文字列のどこかにある場合:

(" hello 123 everybody 4").replace( /(^.+)(\w\d+\w)(.+$)/i,'$2'); //=> '123'

そして、文字間の数字の場合:

("hello123everybody 4").replace( /(^.+\D)(\d+)(\D.+$)/i,'$2'); //=> '123'

[補遺]

文字列内のすべての数値に一致する正規表現:

"4567 stuff is fun4you 67".match(/^\d+|\d+\b|\d+(?=\w)/g); //=> ["4567", "4", "67"]

結果の配列を数値の配列にマッピングできます。

"4567 stuff is fun4you 67"
  .match(/^\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 67]

フロートを含む:

"4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 2.12, 67]

文字列に数値が含まれていない可能性がある場合は、次を使用します。

( "stuff is fun"
   .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
   .map(function (v) {return +v;}); //=> []

したがって、文字列4567 stuff is fun4you 2.12 67"の開始番号または終了番号を取得するには

// start number
var startingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).shift(); //=> 4567

// end number
var endingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).pop(); //=> 67
57
KooiInc
var str = "some text and 856 numbers 2";
var match = str.match(/\d+/);
document.writeln(parseInt(match[0], 10));

文字列が数値で始まる場合(おそらく空白が前にある)、単純なparseInt(str, 10)で十分です。 parseIntは、先頭の空白をスキップします。

それ以外の場合、10のような文字列は08に変換されるため、0が必要です(ほとんどの実装では、parseIntは、0で始まる数値を8進数と見なします)。

47
Eugene Morozov

Intが必要な場合は、parseInt(myString, 10)を使用します。 (10は、基数10を示します。そうしないと、JavaScriptが8や16などの別のベースを使用しようとする場合があります。

8
Sophie Alpert

正規表現を使用する:

var re = new RegExp(/^\d+/); //starts with digit, one or more
var m = re.exec("4567 stuff is fun 67");
alert(m[0]); //4567

m = re.exec("stuff is fun 67");
alert(m); // null
2
Spikolynn

このreplaceメソッドは簡単な正規表現[^\d].*):

'123 your 1st string'.replace( /[^\d].*/, '' );
// output: "123"

削除最初の桁のないすべて

2
simhumileco