43

我在一个循环中有一个字符串,对于每个循环,它都充满了如下所示的文本:

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

我只想检索字符串中文本的第一个数字,当然我不知道长度。

提前致谢!

4

5 回答 5

72

如果数字在字符串的开头:

("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
于 2009-03-04T07:41:24.810 回答
53
var str = "some text and 856 numbers 2";
var match = str.match(/\d+/);
document.writeln(parseInt(match[0], 10));

如果字符串以数字开头(可能前面有空格),简单parseInt(str, 10)就足够了。 parseInt将跳过前导空格。

10是必要的,因为否则 string like08将被转换为0parseInt在大多数实现中,考虑以八进制开头的数字0)。

于 2009-03-04T07:40:58.320 回答
9

如果你想要一个 int,只需parseInt(myString, 10). (10表示基数为 10;否则,JavaScript 可能会尝试使用不同的基数,例如 8 或 16。)

于 2009-03-04T07:38:18.000 回答
5

replace方法带有一个简单的正则表达式( [^\d].*):

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

删除没有第一个数字的所有内容

于 2019-01-17T09:11:02.070 回答
3

使用正则表达式:

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
于 2009-03-04T07:41:16.307 回答