如何在JavaScript中从字符串中提取数字?

542

我在JavaScript中有一个字符串(例如,#box2),我只想从中获取2

我尝试过:

var thestring = $(this).attr('href');
var thenum = thestring.replace(/(^.+)(\w\d+\w)(.+$)/i, '$2');
alert(thenum);

它仍然在弹出窗口中返回#box2。我该怎么做才能让它起作用?

它需要适应结尾附加的任何长度的数字。


1
你可以这样做。它会很好地工作。var thestring = $(this).attr('href');var thenum = parseFloat(thestring);alert(thenum); - Vivek Shukla
2
这段代码对我来说运行良好,但有一个情况,我有一个字符串'2.5/mile',我想从中提取出2.5。上面的代码给我返回了25而不是2.5。 - Bijay Singh
1
相关链接:https://dev59.com/1HI-5IYBdhLWcg3wbHq- - Avatar
27个回答

12
为了从字符串中返回一个整数,您可以使用以下代码。它会删除所有非数字字符并返回一个整数。
Number("strin[g]3".replace(/\D+/g, ""))

12

function justNumbers(string)
{
   var numsStr = string.replace(/[^0-9]/g, '');
   return parseInt(numsStr);
}

console.log(justNumbers('abcdefg12hijklmnop'));

你可以像这样创建一个函数:

function justNumbers(string)
{
    var numsStr = string.replace(/[^0-9]/g, '');
    return parseInt(numsStr);
}

记住:如果数字前面有零,则int不会包含它。

10
如果您想从价格中解析数字,例如 $6,694.20,可以按以下方式完成:
parseFloat('$6,694.20'.replace(/^\D|,+/g, ''))

或通过函数:

function parsePrice(value) {
  return parseFloat(value.replace(/^\D|,+/g, ''))
}

parsePrice('$6,694.20') // 6694.2

请注意,如果字符串开头有不止一个字符不是数字的一部分,则需要使用 value.replace(/^\D+|,+/g, '') - Joshua Richardson

7
let str = "Total Work Duration: 189.56 Hrs.Present: 23.5 Absent: 2";

/* The provided regex globally matches the character
   "." and a digit from the string */
let numArr = str.match(/[\d\.]+/g)

/* It returns an array [189.56, ., 23.5, 2], and
   uses the filter function to remove the '.' */
numArr = numArr.filter(n => n != '.')
console.log(numArr)

3
虽然这段代码片段可能解决了问题,但是包括一些解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,并且这些人可能不知道您提出代码建议的原因。 - dpr

6
你可以使用正则表达式。
var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);

那将会触发警报2。


4
-1 多个数字将不会被捕获,使用数组在警报中 - Shiplu Mokaddim

5

如果有人需要保留提取出的数字中的小数点:

var some = '65,87 EUR';
var number = some.replace(",",".").replace(/[^0-9&.]/g,'');
console.log(number); // returns 65.87

4

以下是检查无数据的解决方案:

var someStr = 'abc'; // Add 123 to string to see the inverse

var thenum = someStr.match(/\d+/);

if (thenum != null)
{
    console.log(thenum[0]);
}
else
{
    console.log('Not a number');
}

4
您可以如下使用Underscore.js字符串库:

您可以使用Underscore.js的字符串库:

var common = "#box"
var href = "#box1"

_(href).strRight(common)

结果将是:1。
参见:Underscore.string
演示:http://jsfiddle.net/abdennour/Vyqtt/ HTML 代码:
<p>
    <a href="#box1" >img1</a>
    <a href="#box2" >img2</a>
    <a href="#box3" >img3</a>
    <a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>

JavaScript代码:

var comm = "#box"
$('a').click(function() {
  $('div').html(_($(this).attr('href')).strRight(comm))})

如果您有以下后缀:
href="box1az"

您可以使用以下演示: http://jsfiddle.net/abdennour/Vyqtt/1/
function retrieveNumber(all, prefix, suffix) {
  var left = _(all).strRight(prefix);
  return _(left).strLeft(suffix);
}

3
请检查以下JavaScript代码。您只能得到一个数字。

var txt = "abc1234char5678#!9";
var str = txt.match(/\d+/g, "") + '';
var s = str.split(',').join('');
alert(Number(s));

输出:1234567789

3
var elValue = "-12,erer3  4,-990.234sdsd";

var isNegetive = false;
if(elValue.indexOf("-") == 0)
    isNegetive = true;

elValue = elValue.replace( /[^\d\.]*/g, '');
elValue = isNaN(Number(elValue)) ? 0 : Number(elValue);

if(isNegetive)
    elValue = 0 - elValue;

alert(elValue); // -1234990.234

1
添加一个解释。例如,为什么您使用这个正则表达式。 - mentallurg
这是从哪里复制来的?拼写错误“negetive”可能是一个不错的签名。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接