2012-01-11 16 views
5

W javascript, mam ciąg znaków, który zawiera liczby i chcę zwiększyć wartości o jeden.Jak wykonywać operacje na Regex Wsteczne dopasowania w JavaScript?

przykład:

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

Stosując wyrażenie regularne, możliwe jest wykonywanie operacji (dodawanie w tym przypadku) w dopasowanej odwołaniem wstecznym?

znaleziona podobny question użyciu Ruby

string.gsub(/(\d+)/) { "#{$1.to_i + 1}"} 

Odpowiedz

7

Zastosowanie string.replace z funkcją jako drugi 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" 

pamiętać, że jeśli używasz pasujących grup wówczas pierwszy argument do funkcji będzie cały mecz, a każdy kolejny argument będzie numerowaną pasującą grupą.

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." 
+0

szybko. Skończyło się na używaniu argumentów [n] (versus x) w moim rzeczywistym kodzie (ponieważ miałem wiele backreferencji) –

1

Znaleziono.

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) 

Powinien odgadnąć, że zadziała anonimowa funkcja.

Powiązane problemy