简体   繁体   中英

How can I extract a number from a string in JavaScript?

I have a string in JavaScript (eg #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.

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"

Since this answer gained popularity for some reason, 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("");
alert (numb);​

result

1234561613213213

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

Tried all the combinations cited above with this Code and got it working, 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 attr but whatever, the solution is better, because its more complete.

you may use 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 vanilla javascript function:

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

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

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

jsFiddle:

 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 wont have it

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

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

You can use regular expression.

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

That will alert 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)

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

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

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

You can use Underscore String Library as following

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

_(href).strRight(common)

result will be: 1

See: https://github.com/epeli/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>

JS Code:

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

if you have suffix as following:

href="box1az" 

You can use the next demo:

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

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

}

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 here: http://ideone.com/iOCf5G

Here's a solt. that checks for no data

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

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

if (thenum != null )
{
    console.log(thenum[0]);
}
else
{
 console.log('no number');
}
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);

please check below javaScripts, there you can get only number

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

output: 1234567789

This answer will cover most of the scenario. I can across this situation when user try 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 a array of string as output >> ["34", "56766"]

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

join will convert and concatenate that array data into single string

output >> "3456766"

In my example I need 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'))
  });

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]);

written without regex

 // 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

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 function where you need, with parameter.

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

find all numbers from a string using regular exp

在此处输入图片说明

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)

)

Одного разу тамада на весіллі вирішив розважити гостей, і встановив правило: як тільки приходить новий гість, кожен п'є по одній порції випивки!

Давай допоможемо тамаді порахувати, скільки порцій випивки потрібно приготувати, і напишемо функцію getDrinks. Вона приймає ціле число numberOfGuests і повертає необхідну кількість порцій випивки, щоб вистачило усім гостям.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM