2009-05-26 4 views
0

Ich würde gerne wissen, wie jedes Spiel mit einem anderen Text ersetzen? ist die Quelle sagen Lassen Text ist:Ersetzen Sie jede RegExp Übereinstimmung mit anderem Text in ActionScript 3

var strSource:String = "find it and replace what you find."; 

..und wir haben einen regulären Ausdruck wie:

var re:RegExp = /\bfind\b/g; 

Nun, ich brauche jedes Spiel mit unterschiedlichem Text (zum Beispiel) ersetzen:

var replacement:String = "replacement_" + increment.toString(); 

So würde die Ausgabe so etwas wie:

output = "replacement_1 it and replace what you replacement_2"; 

Jede Hilfe wird geschätzt ..

Antwort

1

ich mit einer Lösung schließlich kam .. Hier ist es, wenn jemand braucht:

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++; 
} 

Danke trotzdem ...

0

Lassen Sie das Flag g (global) stehen und wiederholen Sie die Suche mit der entsprechenden Ersetzungszeichenfolge. Schleife bis die Suche fehlschlägt

+0

Danke, aber das wird nicht funktionieren, weil im eigentlichen Code nicht nach dem Wort "finden" suchen (Ich gab dieses Beispiel, um die Frage klarer zu machen). Es sucht nach etwas wie. *? damit; Ihr Weg schafft eine endlose Schleife. –

0

Nicht sicher über ActionScript, aber in vielen anderen Regex-Implementierungen können Sie normalerweise eine Callback-Funktion übergeben, die Logik für jede Übereinstimmung ausführt und ersetzt.

3

Sie auch eine Ersatzfunktion, so etwas wie diese verwenden:

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(); 
});