Вы правильно вызвали свою функцию? То есть. вещь, которую вы передаете как параметр, действительно строка?
В противном случае я не вижу проблем с вашим кодом - приведенный ниже пример работает как положено
function trim(str) {
return str.replace(/^\s+|\s+$/g,'');
}
trim(' hello '); // --> 'hello'
Однако, если вы называете свой functoin чем-то нестроковым, вы действительно получите ошибку выше:
trim({}); // --> TypeError: str.replace is not a function