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

IT技术 javascript regex string numbers
2021-01-25 22:36:28

我在 JavaScript 中有一个字符串(例如#box2),我只想要2它。

我试过:

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

它仍然#box2在警报中返回,我怎样才能让它工作?

它需要适应末端附加的任何长度数字。

6个回答

对于这个特定的例子,

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

在一般情况下:

 thenum = "foo3bar5".match(/\d+/)[0] // "3"

由于此答案由于某种原因而广受欢迎,因此有一个好处:正则表达式生成器。

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>';
}
<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>

是的,没有参考#box2_col3但是请参阅使用的正则表达式 OP ( \w)(.+$)),它清楚地表明数字后面还有其他字符。
2021-03-28 22:36:28
-1,"#box2_col3".replace( /^\D+/g, '')应该显示2,而不是2_col3
2021-03-29 22:36:28
@shiplu.mokadd.im:我#box2_col3在问题中没有看到任何提及
2021-04-03 22:36:28
在这种情况下,如果结束前有数字,您的模式也会失败。
2021-04-03 22:36:28
您可以使用以下方法replace处理前导数字:theString.replace(/^.*\D+/g, '');,但 shiplu.mokadd.im 的解决方案更好。
2021-04-09 22:36:28

您应该尝试以下操作:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);​

结果

1234561613213213
" $ 20.0 ".match(/\d/g).join('') =>“200”(只是说)
2021-03-16 22:36:28
不错的答案,但如果我想要单独的一组数字怎么办。即 1234、5616133...
2021-03-19 22:36:28
或者单行+解析为整数: parseInt(txt.match(/\d/g).join(''), 10)
2021-03-27 22:36:28

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

var num = txt.replace(/[^0-9]/g,'');

txt你的字符串在哪里

它基本上撕掉了任何不是数字的东西。

我认为你也可以通过使用它来达到同样的目的:

var num = txt.replace(/\D/g,'');
/[^0-9]/g+1 可读性。也用于此处的大多数答案:stackoverflow.com/q/1862130/1066234
2021-03-23 22:36:28

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

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

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

这比公认的答案要好,因为它确实在全局范围内替换了所有非数字,顺便说一句,/[^0-9]/g可以替换为/[^\d]/g.
2021-03-31 22:36:28

使用匹配功能。

var thenum = "0a1bbb2".match(/\d+$/)[0];
console.log(thenum);

我想这不适用于 > 1 位数字?(我知道问题是针对 1 位数字的,但我正在查看可能大于 10 的数字。)
2021-03-21 22:36:28
喜欢这个。无需触摸或修改元素即可将数字提取到变量中的最简单方法。我会很感激每个人的组合,以便在字符串内有多个巧合。即字符串 12a55 报告最后一个数字,而不是全部。
2021-04-01 22:36:28
您也可以添加一元 '+' 使其成为整数 var thenum = +thestring.match(/\d+$/)[0];
2021-04-04 22:36:28
@nissemand 不要自己试试。即使你没有看到小提琴。
2021-04-05 22:36:28
@YevgeniyAfanasyev 不应该。检查原始问题。特别是最后一行。数字应该在最后。
2021-04-08 22:36:28