![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 52
|
Помогите, пожалуйста, решить такую проблему.
В текстовом поле нахожу слово и заменяю его. Но меняется также и часть другого слова, которое содержит в себе искомое. Как мне определить, что длина слова "круглый" не равна длине "круг" и поэтому замену в этом слове производить не нужно? |
|
|||||
|
Вот. Не слишком элегантно, но отладил и работает.
// Набор НЕбукв (включая пробел) var delimiters:Array = ",._ -+?(){}[]".split("") // Хэш-объект для проверки на принадлежность символа к разделителям без перебора // ВСЕХ описанных разделителей var delHash:Object = new Object() // Формируем хэш-объект for ( var i=0; i<delimiters.length; i++ ) delHash[ delimiters[i] ] = true // Проверка символа на принадлежность к разделителям function charIsDelimiter( char ){ if ( delHash[char] == true ) return false; else return true; } function searchAndReplace( src, from, to ){ trace( "\n SOURCE STRING:"+src ) var idx var pos = 0 do { idx = src.indexOf( from, pos ) if ( idx >=0 ){ pos = idx+from.length var leftChar = false var rightChar = false // Проверяем крайние символы слова на разделители, если их индексы // лежат в диапазоне граничных индексов строки if ( idx !=0 ) leftChar = charIsDelimiter( src.charAt( idx-1 ) ) if ( idx+from.length != src.length ) rightChar = charIsDelimiter( src.charAt( idx+from.length ) ) if ( !leftChar && !rightChar ) src = src.substr(0,idx)+to+src.substr(idx+from.length, src.length) } } while ( idx!=-1 ) // Продолжаем поиск по строке, пока искомая сигнатура в ней не перестанет находиться trace( "RESAULT STRING:"+src ) } var sourceText = "круг, круглый, __круг___кругляшок, округлый, (круг"; searchAndReplace( sourceText, "круг","квадрат" ) |
|
|||||
|
Не надо разбираться - бери да юзай.
![]() |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 52
|
Легко сказать) стоит поменять условия и у меня уже возникают проблемы.
Так работает. arr = new Array(['круг', ['квадрат']],['овал',['треугольник']]); searchAndReplace(sourceText, arr[0][0], arr[0][1]); |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 52
|
dark256, еще раз спасибо, вроде разобрался:
var sourceText = "круг, круглый, __круг___кругляшок. округлый, (круг, овал овальный, полумесяц сфера, цилиндр цилиндрический, тор"; arr = new Array(['круг','овал','полумесяц'], ['сфера','цилиндр','тор']); arrz = new Array(['квадрат','треугольник','прямоугольник'], ['пирамида','конус','параллепипед']); var delimiters:Array = ",._ -+?(){}[]".split(""); var delHash:Object = new Object(); for (var i = 0; i<delimiters.length; i++) { delHash[delimiters[i]] = true; } function charIsDelimiter(char) { if (delHash[char] == true) { return false; } else { return true; } } function searchAndReplace() { trace("\n SOURCE STRING:"+sourceText); var idx; var pos = 0; for (i=0; i<=sourceText.length; i++) { for (j=0; j<=sourceText.length; j++) { do { idx = sourceText.indexOf(arr[i][j], pos); var r:Number = Math.floor(Math.random()*arrz[i].length); if (idx>=0) { pos = idx+arr[i][j].length; var leftChar = false; var rightChar = false; if (idx != 0) { leftChar = charIsDelimiter(sourceText.charAt(idx-1)); } if (idx+arr[i][j].length != sourceText.length) { rightChar = charIsDelimiter(sourceText.charAt(idx+arr[i][j].length)); } if (!leftChar && !rightChar) { sourceText = sourceText.substr(0, idx)+arrz[i][r]+sourceText.substr(idx+arr[i][j].length, sourceText.length); } } } while (idx != -1); } } trace("RESAULT STRING:"+sourceText); } searchAndReplace(); Не получается( При перестановке в массиве, слово (например, "круг") не ищет. Исходный массив: Ни так: Ни так: |
|
|||||
|
Я, к сожалению, не могу до сих пор понять смысла подобных входных данных.......
Посомтреть код смогу только ближе к вечеру. Пока опишите суть и смысл подобных массиово на входе... |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 52
|
Смысл такой.
Найти в тексте все слова из arr[0] (это будут схожие по смыслу слова) и заменить их на рандомное слово из arrz[0], затем из arr[1] на arrz[1] и т.д. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|