Replace the last and first integers of a string - javascript

I have a string like this : var input = "/first_part/5/another_part/3/last_part"
I want to replace the last occurence of integers (3 in my string), then the first occurence (5).
I tried this: input .replace(/\d+/, 3); which replace all occurences. But how to only target the last / first one.
Thanks in advance.

This will replace the first and last single digit in the input string with 3
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$13$23$3");
Here's a reFiddle link that demos this: http://refiddle.com/1am9
More readable:
var replacement = '3';
input.replace(/^(.*?)\d(.*)\d(.*)$/, "$1" + replacement + "$2" + replacement + "$3");
or input.replace(/^(.*?)\d(.*)\d(.*)$/, ["$1", "$2", "$3"].join(replacement)); if that's your thing.

You can use this negative lookahead based regex:
var input = "/first_part/5/another_part/3/last_part";
// replace first number
var r = input.replace(/\d+/, '9').replace(/\d+(?=\D*$)/, '7');
//=> /first_part/9/another_part/7/last_part
Here \d+(?=\D*$) means match 1 or more digits that are followed by all non-digits till end of line.

Here is a pretty rigid approach to your problem, you might want to adapt it to your needs, but it shows one way you can get things done.
// input string
var string = "/first_part/5/another_part/3/last_part";
//match all the parts of the string
var m = string.match(/^(\D+)(\d+)+(\D+)(\d+)(.+)/);
// ["/first_part/5/another_part/3/last_part", "/first_part/", "5", "/another_part/", "3", "/last_part"]
// single out your numbers
var n1 = parseInt(m[2], 10);
var n2 = parseInt(m[4], 10);
// do any operations you want on them
n1 *= 2;
n2 *= 2;
// put the string back together
var output = m[1] + n1 + m[3] + n2 + m[5];
// /first_part/10/another_part/6/last_part

Related

Javascript SUBSTR

I have a dynamic string value "radio_3_*".
Like:
1 - radio_3_5
2 - radio_3_8
3 - radio_3_78
4 - radio_3_157
5 - radio_3_475
How can I pick the radio_3 part.
Basic regular expression
var str = "radio_3_5";
console.log(str.match(/^[a-z]+_\d+/i));
And how the reg exp works
/ Start of reg exp
^ Match start of line
[a-z]+ Match A thru Z one or more times
_ Match underscore character
\d+ Match any number one or more times
/ End of Reg Exp
i Ignores case
Or with split
var str = "radio_334_1234";
var parts = str.split("_");
var result = parts[0] + "_" + parts[1];
Or even crazier (would not do)
var str = "radio_334_1234";
var result = str.split("_").slice(0,2).join("_");
You could just take your string and use javascript method match
myString = "radio_334_1234"
myString.match("[A-Za-z]*_[0-9]*")
//output: radio_334
[A-Za-z]* Will take any number of characters in upper or lower case
_ Will take the underscore
[0-9]* Will take any number of characters from 0 to 9
Try this:
var str = 'radio_3_78';
var splitStr = str.split('_');
var result = splitStr[0] + '_' + splitStr[1];
http://jsfiddle.net/7faag7ug/2/
Use split and pop, like below.
"radio_3_475".split("_").pop(); // = 475

Javascript add count to a number with comma

So I have this
var str=document.getElementById('elem').innerHTML;
str=parseInt(str)+1;
<span id="elem">1,500</span>
and I can't get it to take the entire number and add one (+1) to the number without taking comma off. Can you suggest something?
Remove the commas by replacing them with an empty string, then you can parse the string.
Remember the second parameter in the parseInt method that specifies the base, so that it doesn't use base 8 for zero padded values.
var num = parseInt(str.replace(/,/g, ''), 10) + 1;
If you want to put the changed number back formatted with commas, you can use:
var s = num.toString();
for (var i = s.length - 3; i > 0; i -= 3) {
s = s.substr(0, i) + ',' + s.substr(i);
}
document.getElementById('elem').innerHTML = s;

How to add digit before first character of string in javascript?

I have a string, and I need to get its first character. if that character is alphabetic (between A to Z or a to z)then i want add any digit in-front of that character
var x = 'somestring'
alert(x.charAt(0));
in above string first character has alphabet then i need to attach any digit (0 to 9) before string
4somestring
How can I fix my code?
if (/[a-zA-Z]/.test(x.charAt(0))) {
x = (Math.floor(Math.random() * 10)) + x;
}
Simply use regexes, the test method, and Math.random.
You could also use an anchor so you don't have to call charAt:
if (/^[a-zA-Z]/.test(x)) {
Here is a fiddle.
var x = 'somestring';
if (! /^\d+$/.test(x[0]))
x = 5 + x; // or some other number

Remove/ truncate leading zeros by javascript/jquery

Suggest solution for removing or truncating leading zeros from number(any string) by javascript,jquery.
You can use a regular expression that matches zeroes at the beginning of the string:
s = s.replace(/^0+/, '');
I would use the Number() function:
var str = "00001";
str = Number(str).toString();
>> "1"
Or I would multiply my string by 1
var str = "00000000002346301625363";
str = (str * 1).toString();
>> "2346301625363"
Maybe a little late, but I want to add my 2 cents.
if your string ALWAYS represents a number, with possible leading zeros, you can simply cast the string to a number by using the '+' operator.
e.g.
x= "00005";
alert(typeof x); //"string"
alert(x);// "00005"
x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value
alert(typeof x); //number , voila!
alert(x); // 5 (as number)
if your string doesn't represent a number and you only need to remove the 0's use the other solutions, but if you only need them as number, this is the shortest way.
and FYI you can do the opposite, force numbers to act as strings if you concatenate an empty string to them, like:
x = 5;
alert(typeof x); //number
x = x+"";
alert(typeof x); //string
hope it helps somebody
Since you said "any string", I'm assuming this is a string you want to handle, too.
"00012 34 0000432 0035"
So, regex is the way to go:
var trimmed = s.replace(/\b0+/g, "");
And this will prevent loss of a "000000" value.
var trimmed = s.replace(/\b(0(?!\b))+/g, "")
You can see a working example here
parseInt(value) or parseFloat(value)
This will work nicely.
I got this solution for truncating leading zeros(number or any string) in javascript:
<script language="JavaScript" type="text/javascript">
<!--
function trimNumber(s) {
while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
return s;
}
var s1 = '00123';
var s2 = '000assa';
var s3 = 'assa34300';
var s4 = 'ssa';
var s5 = '121212000';
alert(s1 + '=' + trimNumber(s1));
alert(s2 + '=' + trimNumber(s2));
alert(s3 + '=' + trimNumber(s3));
alert(s4 + '=' + trimNumber(s4));
alert(s5 + '=' + trimNumber(s5));
// end hiding contents -->
</script>
Simply try to multiply by one as following:
"00123" * 1; // Get as number
"00123" * 1 + ""; // Get as string
1. The most explicit is to use parseInt():
parseInt(number, 10)
2. Another way is to use the + unary operator:
+number
3. You can also go the regular expression route, like this:
number.replace(/^0+/, '')
Try this,
function ltrim(str, chars) {
chars = chars || "\\s";
return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
var str =ltrim("01545878","0");
More here
You should use the "radix" parameter of the "parseInt" function :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FparseInt
parseInt('015', 10) => 15
if you don't use it, some javascript engine might use it as an octal
parseInt('015') => 0
If number is int use
"" + parseInt(str)
If the number is float use
"" + parseFloat(str)
const number = '0000007457841';
console.log(+number) //7457841;
OR number.replace(/^0+/, '')
Regex solution from Guffa, but leaving at least one character
"123".replace(/^0*(.+)/, '$1'); // 123
"012".replace(/^0*(.+)/, '$1'); // 12
"000".replace(/^0*(.+)/, '$1'); // 0
I wanted to remove all leading zeros for every sequence of digits in a string and to return 0 if the digit value equals to zero.
And I ended up doing so:
str = str.replace(/(0{1,}\d+)/, "removeLeadingZeros('$1')")
function removeLeadingZeros(string) {
if (string.length == 1) return string
if (string == 0) return 0
string = string.replace(/^0{1,}/, '');
return string
}
One another way without regex:
function trimLeadingZerosSubstr(str) {
var xLastChr = str.length - 1, xChrIdx = 0;
while (str[xChrIdx] === "0" && xChrIdx < xLastChr) {
xChrIdx++;
}
return xChrIdx > 0 ? str.substr(xChrIdx) : str;
}
With short string it will be more faster than regex (jsperf)
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Use "Math.abs"
eg: Math.abs(003) = 3;
console.log(Math.abs(003))

Regex to replace the last number in a filename

I'm creating functionality to increase the last number in a filename with 1.
Samples:
filename01.jpg => filename02.jpg
file01name01.jpg => file01name02.jpg
file01na01me.jpg => file01na02me.jpg
I'm struggling with the cases where the original file name contains the same number two or more times. I only want to increase the last number in the filename.
I have done some research, but not been able to find a correct regex. Perhaps someone could help me.
Ideally I want my code to look something like this:
var filename = "somefilename";
var newFilename = filename.replace(regex,lastNumber + 1);
I'm not sure if it could be done this easy. But I need to figure out the regex before I move on.
Thanks to pivmvb, here is my final solution:
function getIncreasedFileName(fileName){
var newFileName = fileName.replace(/(\D+)(\d+)(\D+)$/,
function(str, m1, m2, m3) {
var newstr = (+m2 + 1) + "";
return m1 + new Array(m2.length+1 - newstr.length).join("0") + newstr + m3;
})
return newFileName;
}
"test01.jpg".replace(/(\D+)(\d+)(\D+)$/, function(str, m1, m2, m3) {
var newstr = (+m2 + 1) + "";
return m1 + new Array(3 - newstr.length).join("0") + newstr + m3;
// m1 === "test"
//
// m2 === "01"
// So:
// +m2 + 1 === 2
//
// (+m2 + 1) + "" === "2"
// (convert to string, call this `newstr`)
//
// new Array(3 - newstr.length).join("0") === "0"
// (this adds an appropriate amount of leading zeroes
// so that the total length is 2)
//
// m3 === ".jpg"
});
Where:
\D+ one or more non-digits
\d+ one or more digits
\D+ one or more non-digits
$ end of string (so it only matches the last digits)
Then replace the matched string by a function that returns a new string, after doing the following:
adding 1 to the number
adding leading zeroes
Here's what I came up with:
var newFilename = filename.replace(/(\d+)(\D*$)/g ,
function(match, c1, c2) {
var nextNum = (+c1 + 1);
return (nextNum < 10 ? "0" + nextNum : nextNum) + c2;
});
Note that I used \D* to match zero or more non-digits between the last number and the end of the string, so that will change "filename.01" to "filename.02" and "name01" to "name02". If you only want to match where there are other characters after the number simply change the * to a + to match one or more non-digits at the end.
You can first find the last digits, increase them and then do the replace:
m = filename.match(/([0-9][0-9])([^0-9]*)$/);
incr = parseInt(m[1]) +1;
newFilename = filename.replace(/([0-9][0-9])([^0-9]*)$/, incr + "$2");
This doesn't add the padding 0 in case number is below zero. I'll let that to you.

Categories

Resources