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.
327 Answers
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 value="42abc"></p> <p>What number do you want to extract? <input value="42"></p> <p><button onclick="update()">Insert Coin</button></p> <p></p>13You should try the following:
var txt = "#div-name-1234-characteristic:561613213213"; var numb = txt.match(/\d/g); numb = numb.join(""); alert (numb); result
1234561613213213 4I 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,''); 2Try 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, ''));1Using match function.
var thenum = "0a1bbb2".match(/\d+$/)[0]; console.log(thenum);7And this is a snippet which extracts prices with currency and formatting:
var price = "£1,739.12"; parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12 1Tried 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.
1you may use great parseInt method
it will convert the leading digits to a number
parseInt("-10px"); // will give you -10 2You 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.
1If 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 String Library as following
var common="#box" var href="#box1" _(href).strRight(common) result will be : 1
<p> <a href="#box1" >img1</a> <a href="#box2" >img2</a> <a href="#box3" >img3</a> <a href="#box4" >img4</a> </p> <div></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 :
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:
1Here'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'); } 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
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 1To 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, "")) let str = "Total Work Duration: 189.56 Hrs.Present: 23.5 Absent: 2"; let numArr = str.match(/[\d\.]+/g) numArr = numArr.filter(n => n != '.') console.log(numArr) 1This 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]); 1changeStrangeDate(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)/'); 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) )
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