dark256, еще раз спасибо, вроде разобрался:

Код AS1/AS2:
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();
Добавлено через 64 часа 46 минут
Не получается( При перестановке в массиве, слово (например, "круг") не ищет.
Исходный массив:

Код AS1/AS2:
arr = new Array(['овал', 'круг' ,'полумесяц'], ['сфера','цилиндр','тор']);
Ни так:

Код AS1/AS2:
arr = new Array(['овал', 'круг' ,'полумесяц'], ['сфера','цилиндр','тор']);
Ни так:

Код AS1/AS2:
arr = new Array(['овал','полумесяц'], ['сфера','цилиндр','тор'],['круг']);