Хм. А как, простите, алгоритм распознает, какая из
одинаковых кавычек открывающая, а какая -- закрывающая?
Боюсь, regexp'ом при такой постановке задачи не ограничишься.
alert( 'Стандартом языка "Javas"cript". является стандарт "ECMAScript", "blah - "test": tratata"'.replace(/(^|\s)"/g, "$1«").replace(/"([\s,.!?\-()]|$)/g, "»$1") );