从字符串中提取("获取")一个数字

use*_*585 325 javascript string numbers

我在javascript中有一个字符串,如`#box2',我只想要它的'2'.

尝试:

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

它仍会在警报中返回#box2,我该如何让它工作?

它需要适应末端附加的任何长度编号.

geo*_*org 541

对于这个具体的例子,

 var thenum = thestring.replace( /^\D+/g, ''); // replace all leading non-digits with nothing
Run Code Online (Sandbox Code Playgroud)

在一般情况下:

 thenum = "foo3bar5".match(/\d+/)[0] // "3"
Run Code Online (Sandbox Code Playgroud)

由于这个答案因某种原因而受到欢迎,这里有一个奖励:正则表达式生成器.

function getre(str, num) {
  if(str === num) return 'nice try';
  var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g];
  for(var i = 0; i < res.length; i++)
    if(str.replace(res[i], '') === num) 
      return 'num = str.replace(/' + res[i].source + '/g, "")';
  return 'no idea';
};
function update() {
  $ = function(x) { return document.getElementById(x) };
  var re = getre($('str').value, $('num').value);
  $('re').innerHTML = 'Numex speaks: <code>' + re + '</code>';
}
Run Code Online (Sandbox Code Playgroud)
<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>
Run Code Online (Sandbox Code Playgroud)

  • -1,`"#box2_col3".replace(/ ^\D +/g,'')`应该显示为`2`,而不是'2_col3`. (14认同)
  • 在这种情况下,如果在结束前有数字,您的模式也会失败. (3认同)
  • @shiplu.mokadd.im:我在问题中没有看到任何对 `#box2_col3` 的引用。 (2认同)
  • 是的,没有对 `#box2_col3` 的引用。但是请参阅使用的正则表达式 OP (`\w)(.+$)`),它清楚地表明数字后面还有其他字符。 (2认同)
  • 您可以通过使用:`theString.replace(/^.*\D +/g,'');`来使`replace'与前导数字一起工作,但是shiplu.mokadd.im的解决方案更好. (2认同)

小智 203

您应该尝试以下方法:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);?
Run Code Online (Sandbox Code Playgroud)

结果

1234561613213213
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但如果我想要单独的一组数字怎么办?即 1234、5616133... (3认同)
  • 或者单行+解析为整数:`parseInt(txt.match(/\d/g).join(''), 10)` (3认同)
  • 该解决方案不会提取浮动。正则表达式应该是 `/[+-]?\d+(\.\d+)?/g` (3认同)

小智 76

我认为这个正则表达式将满足您的目的:

var num = txt.replace(/[^0-9]/g,'');
Run Code Online (Sandbox Code Playgroud)

txt你的字符串在哪里

它基本上扯掉了任何不是数字的东西.

我认为通过使用它也可以实现同样的目的:

var num = txt.replace(/\D/g,'');
Run Code Online (Sandbox Code Playgroud)

  • `/[^0-9]/g` +1 以提高可读性。也与此处的大多数答案一起使用:/sf/ask/130349131/ (3认同)

Shi*_*dim 52

使用匹配功能.

var thenum = thestring.match(/\d+$/)[0];
alert(thenum);
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


xba*_*aji 52

请尝试以下操作:string.replace(/[^0-9]/g, '');这将删除所有非数字字符,只留下字符串中的数字

function retnum(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return parseInt(num,10); 
}
Run Code Online (Sandbox Code Playgroud)

console.log('abca12bc45qw'.replace(/[^0-9]/g, ''));
console.log('#box2'.replace(/[^0-9]/g, ''));
Run Code Online (Sandbox Code Playgroud)

  • 这比公认的答案要好,因为它确实全局替换了所有非数字,顺便说一句,可以将“ / [^ 0-9] / g”替换为“ / [^ \ d] / g”。 (2认同)

Pau*_*osa 31

尝试上面引用的所有组合与本代码并使其工作,是唯一一个工作该字符串 - >(12) 3456-7890

var str="(12) 3456-7890";
str.replace( /\D+/g, '');
Run Code Online (Sandbox Code Playgroud)

结果: "1234567890"

Obs:我知道像这样的字符串不会在attr上,但无论如何,解决方案更好,因为它更完整.


Lac*_*mov 29

这是一个使用货币和格式提取价格的片段:

var price = "£1,739.12";
parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12
Run Code Online (Sandbox Code Playgroud)

  • 如果我想要 1,739.12 该怎么办? (3认同)

Eug*_*rin 13

你可以使用伟大的parseInt方法

它会将前导数字转换为数字

parseInt("-10px");
// will give you -10
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于数字位于字符串开头的情况 (17认同)
  • 其返回的NaN (2认同)

daw*_*ski 12

要从字符串返回 int,可以执行以下代码。它删除所有非数字字符并返回一个整数。

Number("strin[g]3".replace(/\D+/g, ""))
Run Code Online (Sandbox Code Playgroud)


Eri*_*Aky 10

如果你想从像 6,694.20 美元这样的价格中解析一个数字,可以这样做:

parseFloat('$6,694.20'.replace(/^\D|,+/g, ''))
Run Code Online (Sandbox Code Playgroud)

或者通过函数:

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

parsePrice('$6,694.20') // 6694.2
Run Code Online (Sandbox Code Playgroud)


小智 8

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)
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码片段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (3认同)

icy*_*com 7

对于像这样的字符串#box2,这应该工作:

var thenum = thestring.replace(/^.*(\d+).*$/i,'$1');
Run Code Online (Sandbox Code Playgroud)

的jsfiddle:


小智 7

function justNumbers(string) 
{
   var numsStr = string.replace(/[^0-9]/g,'');
   return parseInt(numsStr);
}
    
console.log(justNumbers('abcdefg12hijklmnop'));
Run Code Online (Sandbox Code Playgroud)

你可以做这样的功能

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

请记住:如果数字前面有一个零,则 int 不会有它


小智 6

您可以使用正则表达式。

var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);
Run Code Online (Sandbox Code Playgroud)

这会提醒2。

  • -1 不会捕获多个数字并在警报中使用数组 (4认同)

Cas*_*rin 6

您可以使用正则表达式从字符串中提取数字:

let string = "xxfdx25y93.34xxd73";
let res = string.replace(/\D/g, "");
console.log(res); 
Run Code Online (Sandbox Code Playgroud)

输出:25933473

将它包装成普通的 javascript 函数:

function onlyNumbers(text){
    return text.replace(/\D/g, "");
}
Run Code Online (Sandbox Code Playgroud)


Jor*_*sys 5

使用正则表达式,如何从字符串获取数字,例如:

String myString = "my 2 first gifts were made by my 4 brothers";
myString = myString .replaceAll("\\D+","");
System.out.println("myString : " + myString);
Run Code Online (Sandbox Code Playgroud)

的结果myString是“ 24

您可以在此处查看此运行代码的示例:http : //ideone.com/iOCf5G

  • Java!== javascript-标准JavaScript中不存在replaceAll。只有像jQuery这样的某些库才具有该方法。将来,您应该澄清一下。 (3认同)

小智 5

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

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