Вот. Не слишком элегантно, но отладил и работает.

Код AS1/AS2:
// Набор НЕбукв (включая пробел)
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, "круг","квадрат" )

Код:
SOURCE STRING:круг, круглый, __круг___кругляшок, округлый, (круг
RESAULT STRING:квадрат, круглый, __квадрат___кругляшок, округлый, (квадрат