admin管理员组

文章数量:1125758

I have a string in JavaScript (e.g., #box2), and I just want the 2 from it.

I tried:

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

It still returns #box2 in the alert. How can I get it to work?

It needs to accommodate for any length number attached on the end.

I have a string in JavaScript (e.g., #box2), and I just want the 2 from it.

I tried:

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

It still returns #box2 in the alert. How can I get it to work?

It needs to accommodate for any length number attached on the end.

Share Improve this question edited Jan 23, 2023 at 1:44 Peter Mortensen 31.6k22 gold badges109 silver badges133 bronze badges asked Apr 4, 2012 at 1:14 user1022585user1022585 13.6k22 gold badges57 silver badges76 bronze badges 3
  • 1 you can simply do like this . it will work well . var thestring = $(this).attr('href'); var thenum = parsefloat(thestring); alert(thenum); – Vivek Shukla Commented Jul 3, 2017 at 11:10
  • 2 this code works fine for me but for one case , I have a string '2.5/mile' and I want to extract 2.5 out of this. Above code gives me 25 instead of 2.5 – Bijay Singh Commented Aug 27, 2017 at 11:07
  • 1 Related: stackoverflow.com/q/1862130/1066234 – Avatar Commented Jan 12, 2018 at 16:47
Add a comment  | 

28 Answers 28

Reset to default 870

For this specific example,

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

In the general case:

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

Here's a bonus: regex generator.

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>

You should try the following:

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

I think this regular expression will serve your purpose:

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

Where txt is your string.

It basically rips off anything that is not a digit.

I think you can achieve the same thing by using this as well:

var num = txt.replace(/\D/g, '');

Try the following: string.replace(/[^0-9]/g, ''); This will delete all non-digit characters, leaving only digits in the string

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

Using the match function.

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

And this is a snippet which extracts prices with currency and formatting:

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

I tried all the combinations cited in the previous answer with this code and got it working. It was the only one that worked on that string → (12) 3456-7890

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

Result: "1234567890"

Obs: I know that a string like that will not be on the attribute, but whatever, the solution is better, because it’s more complete.

You may use the great parseInt() method.

It will convert the leading digits to a number:

parseInt("-10px");
// Will give you -10

You can extract numbers from a string using a regex expression:

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

Output: 25933473

Wrap it into a vanilla JavaScript function:

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

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

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

You can do a function like this

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

Remember: if the number has a zero in front of it, the int won’t have it

For a string such as #box2, this should work:

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

jsFiddle:

  • http://jsfiddle.net/dmeku/

To return an int from the string, you can do the following code. It removes all not number characters and returns an integer.

Number("strin[g]3".replace(/\D+/g, ""))

If you want to parse a number from a price like $6,694.20, it can be done this way:

parseFloat('$6,694.20'.replace(/^\D|,+/g, ''))

Or via a function:

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

parsePrice('$6,694.20') // 6694.2
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)

You can use a regular expression.

var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);

That will alert 2.

If someone need to preserve dots in extracted numbers:

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

You can use Underscore.js' string library as follows:

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

_(href).strRight(common)

The result will be: 1

See: Underscore.string

Demo:

http://jsfiddle.net/abdennour/Vyqtt/

HTML code:

<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 code:

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

If you have a suffix as follows:

href="box1az"

You can use the following demo:

http://jsfiddle.net/abdennour/Vyqtt/1/

function retrieveNumber(all, prefix, suffix) {
  var left = _(all).strRight(prefix);
  return _(left).strLeft(suffix);
}

Here's a solution that checks for no data:

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

Please check the below JavaScript code. There you can get only a number.

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

Output: 1234567789

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

Use this one-line code to get the first number in a string without getting errors:

var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10);

Written without a regular expression:

// Without Regex

function extractNumber(string) {
  let numArray = string.split('').map(item => {
    if (typeof +item === 'number' && !isNaN(+item)) 
      return +item
  })
  return +numArray.join('')
}

extractNumber('@1200milion$')  // 1200

With regular expressions, how to get numbers from a string, for example:

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

The result of myString is "24".

You can see an example of this running code at http://ideone.com/iOCf5G.

You need to add "(/\d+/g)" which will remove all non-number text, but it will still be a string at this point. If you create a variable and "parseInt" through the match, you can set the new variables to the array values. Here is an example of how I got it to work:

    var color = $( this ).css( "background-color" );
    var r = parseInt(color.match(/\d+/g)[0]);
    var g = parseInt(color.match(/\d+/g)[1]);
    var b = parseInt(color.match(/\d+/g)[2]);

This answer will cover most of the scenarios. I came across this situation when a user tried to copy paste the phone number.

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

Explanation:

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

str.match(/\d+/g)

It will give an array of strings as output:

["34", "56766"]

 

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

join() will convert and concatenate that array data into a single string.

Output:

"3456766"

In my example, I needed the output as 209-356-6788, so I used replace():

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

In one of my projects I had to take a rating value from a string. This is what I used:

let text = '#xbox2'
let num = text.trim().
  split('').
  map(num => Number(num)).
  filter(x => Number.isInteger(x))

There are multiple ways.

// Using match, match all the digits
'#box2'.match(/\d+/g).join('')

// Using replace, remove everything other than digits
'#box2'.replace(/[^\d]+/g, '')

// Using slice
'#box2'.slice(4)

Use:

changeStrangeDate(dateString: string) {
  var sum = 0;
  var numbers = dateString.match(/\d+/g);
  if (numbers.length > 1) {
    numbers.forEach(element => {
        sum += parseInt(element);
      }
    );
  }
  console.log(new Date(sum).toDateString());
  return new Date(sum).toUTCString();
}

You can do it like that and then call a function where you need it, with a parameter.

this.changeStrangeDate('/Date(1551401820000-0100)/');

本文标签: regexHow can I extract a number from a string in JavaScriptStack Overflow