Reputation: 33702
I'd like to know how to replace each match with a different text? Let's say the source text is:
var strSource:String = "find it and replace what you find.";
..and we have a regex such as:
var re:RegExp = /\bfind\b/g;
Now, I need to replace each match with different text (for example):
var replacement:String = "replacement_" + increment.toString();
So the output would be something like:
output = "replacement_1 it and replace what you replacement_2";
Any help is appreciated..
Upvotes: 0
Views: 3632
Reputation: 752
You could also use a replacement function, something like this:
var increment : int = -1; // start at -1 so the first replacement will be 0
strSource.replace( /(\b_)(.*?_ID\b)/gim , function() {
return arguments[1] + "replacement_" + (increment++).toString();
} );
Upvotes: 3
Reputation: 33702
I came up with a solution finally.. Here it is, if anyone needs:
var re:RegExp = /(\b_)(.*?_ID\b)/gim;
var increment:int = 0;
var output:Object = re.exec(strSource);
while (output != null)
{
var replacement:String = output[1] + "replacement_" + increment.toString();
strSource = strSource.substring(0, output.index) + replacement + strSource.substring(re.lastIndex, strSource.length);
output = re.exec(strSource);
increment++;
}
Thanks anyway...
Upvotes: 1
Reputation: 4772
Not sure about actionscript, but in many other regex implementations you can usually pass a callback function that will execute logic for each match and replace.
Upvotes: 0
Reputation: 46985
leave off the g (global) flag and repeat the search with the appropriate replace string. Loop until the search fails
Upvotes: 0