我有一个JavaScript字符串(例如,#box2),我只是想从它的2。

我试着:

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

它仍然在警告中返回#box2。我怎样才能让它工作呢?

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


当前回答

下面是一个无数据检查的解决方案:

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

其他回答

对于这个具体的例子,

 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>

这个答案将涵盖大多数场景。当一个用户试图复制粘贴电话号码时,我遇到了这种情况。

$('#help_number').keyup(function() {
  $(this).val().match(/\d+/g).join("")
});

解释:

str = "34%^gd 5-67 6-6ds"

str.match(/\d+/g)

它将给出一个字符串数组作为输出:

["34", "56766"]

 

str.match(/\d+/g).join("")

Join()将转换该数组数据并将其连接为单个字符串。

输出:

"3456766"

在我的例子中,我需要输出为209-356-6788,所以我使用replace():

$('#help_number').keyup(function() {
  $(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/, '$1-$2-$3'))
});

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

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

输出:25933473

将它包装成一个普通的JavaScript函数:

function onlyNumbers(text){
    return text.replace(/\D/g, "");
}

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

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

myString的结果是“24”。

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

对于#box2这样的字符串,这应该是有效的:

var thenum = thestring.replace(/^.*?(\d+).*/,'$1');

jsFiddle:

http://jsfiddle.net/dmeku/