Onur Yıldırım
Onur Yıldırım

Reputation: 33702

Replace each RegExp match with different text in ActionScript 3

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

Answers (4)

Robert Sköld
Robert Sköld

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

Onur Yıldırım
Onur Yıldırım

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

patjbs
patjbs

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

ennuikiller
ennuikiller

Reputation: 46985

leave off the g (global) flag and repeat the search with the appropriate replace string. Loop until the search fails

Upvotes: 0

Related Questions