Если Вы точно уверены в получаемой строке, и что ничего лишнего там не подсунут, а так же Вам не критична производительность, то так:
function calculateString(str) {
return (new Function('return ' + str))();
}
Можно и через eval, но eval еще медленнее чем new Function и к тому же отключает оптимизацию
Если строка приходит от пользователя, то выше указанный способ не является безопасным, так как пользователь может выполнить там что угодно, поэтому более правильно делать лексический разбор выражения, разбивать на атомарные операции, отсортировать в порядке приоритета и выполнять