2014-12-20 2 views
0

Можете ли вы поместить функцию, в которой заменяемый текст находится в ActionScript?Поддерживает ли AS3 функции при использовании String.replace() с RegEx?

Например вы можете принять это:

string = string.replace(/\b\w+\b/g, "word"); 

И сделать это:

string = string.replace(/\b\w+\b/g, function(m){ 
    return /^[A-Z]/.test(m) ? "Word" : "word" 
}); 

Я получаю эту ошибку:

ArgumentError: Error #1063: Argument count mismatch on Function/<anonymous>(). Expected 1, got 3. 
    at String$/_replace() 

ответ

0

я нашел больше информации here.

Таким образом, хотя это работает в JavaScript:

string = string.replace(/\b\w+\b/g, function(m){ 
    return /^[A-Z]/.test(m) ? "Word" : "word" 
}); 

Мы должны удалить параметр и использовать объект доступны аргументы всех функций следующим образом:

string = string.replace(/\b\w+\b/g, function():String { 
    var match:String = arguments[0]; 
    //var matchIndex:int = arguments[arguments.length-2]; 
    //var updatedString:String = arguments[arguments.length-1]; 

    return /^[A-Z]/.test(match) ? "Word" : "word" 
}); 

Вот подробное описание на них параметры:

При указании функции как замены метод replace() передает следующий параграф метров до функции:

  • Соответствующая часть строки.
  • Любые скопированные совпадающие групповые совпадения представлены в качестве следующих аргументов. Количество аргументов, переданных таким образом, будет варьироваться от в зависимости от количества скобок. Вы можете определить количество скобок, проверив аргументы.length - 3 в пределах функционального кода.
  • Позиция индекса в строке, где начинается совпадение.
  • Полная строка.
Смежные вопросы