Замените каждое совпадение RegExp другим текстом в ActionScript 3 - PullRequest
0 голосов
/ 27 мая 2009

Я хотел бы знать, как заменить каждое совпадение на другой текст Допустим, исходный текст:

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

.. и у нас есть такое регулярное выражение, как:

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

Теперь мне нужно заменить каждое совпадение другим текстом (например):

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

Таким образом, результат будет примерно таким:

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

Любая помощь приветствуется ..

Ответы [ 4 ]

3 голосов
/ 18 июля 2009

Вы также можете использовать функцию замены, примерно так:

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();
} );
1 голос
/ 27 мая 2009

Я наконец нашел решение ... Вот, если кому-то нужно:

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

В любом случае, спасибо ...

0 голосов
/ 27 мая 2009

Не уверен насчет ActionScript, но во многих других реализациях регулярных выражений вы обычно можете передать функцию обратного вызова, которая будет выполнять логику для каждого совпадения и заменять.

0 голосов
/ 27 мая 2009

снимите флажок g (global) и повторите поиск с соответствующей строкой замены. Цикл до тех пор, пока поиск не завершится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...