То что перед смайлом - в символьный класс и сохраняющие скобки, то что после - в опережающую проверку. Так
/([,.\s\r\n()])smile(?=[,.\s\r\n()])/
Затем при замене то что в первых скобках ставьте на место, а смайл заменяем.
Gvozd
На мой взгляд регекспы проще кода, и уж точно проще сотен строк кода.