![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: May 2009
Сообщений: 63
|
Здравствуйте.
Понадобилась функция, способная изменять переданную ей строку по определенным правилам (например переводить латиницу в кириллицу, но НЕ ПОСИМВОЛЬНО, а "поблочно"). Руководствуясь теми скромными знаниями, что имею, написал такой код (упрощенный): function charConv(str:String){
var arr:Array = [//массив с "правилами" замены:
["shi", "ши"],
["a", "а"],
["wa", "ва"],
["se", "сэ"]
]
for (var i:Number = 0; i<arr.length; i++){
if(str.indexOf(arr[i][0]) != -1){
str = str.replace(new RegExp(arr[i][0]), arr[i][1])//замена
}
}
return str;
}
вернет "шиwа" вместо "шива", так как "а" цикл "найдет" раньше, чем "wa". Поэтому хотелось бы знать, существует ли более эффективный способ проверки соответсвий (нечувствительный к порядку "правил"). Сам я ничего придумать так и не смог. |
|
|||||
|
Можно поступить так:
function convert(piece:String, pos:uint, _source:String):String{ var rez:String = "<->"; switch(piece){ case "shi": rez = "ши"; break; case "a": rez = "а"; break; case "wa": rez = "ва"; break; case "se": rez = "се"; break; } return rez; } function translit(str:String):String{ str = str.replace(new RegExp(/shi|a|wa|se/g), convert); return str; } trace(translit("shiwa")); |
|
|||||
|
берете слово и сравниваете N'ое кол - во его символов начиная сначала с вашим шифром, после того как нашли сходство записываете в переменную, скажем, newStr - код найденной последовательности, после из переводимого слова, исключаете найденные символы, и повторяете оперецию снова, только! к переменной newStr прибавляете новый код, а не переписываете ее, и так до конца слова.... думаю принцип таков
|
|
|||||
|
Регистрация: May 2009
Сообщений: 63
|
Понятно. Всем большое спасибо за информацию...
Судя по всему, в моем случае "ручками" - самый удобный вариант. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|