Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Perform Operations on Regex Backreference Matches in Javascript?

In javascript, I have a string which contains numbers, and I want to increment the values by one.

Example:

var string = "This is a string with numbers 1 2 3 4 5 6 7 8 9 10";

var desiredResult = "This is a string with numbers 2 3 4 5 6 7 8 9 10 11";

Using a regex, is it possible to perform operations (addition in this case) on the matched backreference?

A found a similar question using Ruby:

string.gsub(/(\d+)/) { "#{$1.to_i + 1}"}
like image 855
Lance Rushing Avatar asked Jan 11 '12 19:01

Lance Rushing


2 Answers

Use string.replace with a function as the second argument:

var s1 = "This is a string with numbers 1 2 3 4 5 6 7 8 9 10";
var s2 = s1.replace(/\d+/g, function(x) { return Number(x)+1; });
s2; // => "This is a string with numbers 2 3 4 5 6 7 8 9 10 11"

Note that if you use matching groups then the first argument to the function will be the entire match and each following argument will be the numbered matching group.

var x = "This is x1, x2, x3.";
var y = x.replace(/x(\d+)/g, function(m, g1) {
  return "y" + (Number(g1)+1);
});
y; // => "This is y2, y3, y4."
like image 78
maerics Avatar answered Nov 02 '22 12:11

maerics


Found it.

var string = "This is a string with Numbers 1 2 3 4 5 6 7 8 9 10";
var desiredResult = "This is a string with Numbers 2 3 4 5 6 7 8 9 10 11";
var actualResult = string.replace(/([0-9]+)/g, function() {
    return parseInt(arguments[1])+1 
});
console.log(actualResult)

Should have guessed an anonymous function would work.

like image 30
Lance Rushing Avatar answered Nov 02 '22 13:11

Lance Rushing