使用JavaScript获取字符串中的第一个整数

使用JavaScript获取字符串中的第一个整数,javascript,string,string-formatting,Javascript,String,String Formatting,我在一个循环中有一个字符串,对于每个循环,它都充满了如下所示的文本: "123 hello everybody 4" "4567 stuff is fun 67" "12368 more stuff" 我只想检索字符串中文本之前的第一个数字,当然,我不知道长度 提前谢谢 如果需要int,只需parseInt(myString,10)。(10表示基数10;否则,JavaScript可能会尝试使用不同的基数,如8或16。) 如果字符串以数字开头(前面可能有空格),简单的parseInt(str,1

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

"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"
我只想检索字符串中文本之前的第一个数字,当然,我不知道长度


提前谢谢

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

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


<代码> 10 是必要的,否则否则字符串“<代码> 08”/代码>将被转换为<代码> 0 <代码>(<代码> PARSETIN < /代码>:在大多数实现中考虑从“代码> 0”/代码>为八进制开始的数字。

< P>使用正则表达式:

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

如果数字位于字符串的开头:

("123 hello everybody 4").replace(/(^\d+)(.+$)/i,'$1'); //=> '123'
(" hello 123 everybody 4").replace( /(^.+)(\w\d+\w)(.+$)/i,'$2'); //=> '123'
如果它在字符串中的某个位置:

("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的起始或结束编号,这是fun4you 2.12 67“


方法替换为一个简单的正则表达式(
[^\d].
):


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

这些数字不太好用。(“hello123”)。替换(/(^.+\D)(\D+(\D.+$)/i,$2”)返回“hello124”“。事实上,如果数字在字符串的末尾,这些都不起作用。@user1311069:嗯,答案中没有包括这种情况。”。如果你能提供解决方案,那将是有建设性的。不用客气;)@user1311069:提供了一些额外的方法,也满足了您的需求。这些方法太复杂了<代码>“Hello 123 here!45”。匹配(/\d+/).shift()适用于大多数需要。如果您不确定字符串中是否有数字,请在
.shift()
之前测试
null
。给定正则表达式
/\d+/
,您实际上不需要
parseInt
,类似于
+match.shift()
number(match.shift())
的内容就足够了。此外,您需要检查是否确实存在匹配项。输入字符串可能根本不包含数字:在这种情况下,
match
将为
null
。如果您知道字符串中有数字,可以使用以下一行:
“Hello 123 here!45”。match(/\d+/).shift()
否则,您需要在执行
.shift()
之前测试
null
'123 your 1st string'.replace( /[^\d].*/, '' );
// output: "123"