Наверное, это задание на собеседовании?
Алгоритм: записать в массив позиции символов, которые удалить можно. Проверку делать на цифры/знаки препинания, т.к. их меньше, чем буквенных символов – может, там иероглифов накидают. Если длина массива удалябельных позволяет, с вероятностью 50% выбрать ещё один вариант под удаление.
Позиции под удаление отсортировать по возрастанию, и удалить символы из выбранных позиций, начиная с бОльшей позиции.
function eatme(s) {
var arr = s.split('')
, pos = [] // позиции удалябельных символов
, i
, todo = [] // позиции чтобы удалить
;
for(i=0;i<arr.length;i++) if( !arr[i].match(/[\s\d\.,\?\!:;\(\)"'`—–-]/)) pos.push(i);
if( pos.length === 0) return s; // нечего удалять
todo.push( pos.splice( Math.floor( Math.random() * pos.length),1)[0]);
if( pos.length > 0 && Math.random() > 0.5) {
todo.push( pos.splice( Math.floor( Math.random() * pos.length),1)[0]);
}
// todo содержит 1 или 2 индеса для удаления
todo = todo.sort(function(a,b){return a>b?1:(a<b?-1:0)});
while(todo.length) arr.splice( todo.pop(), 1);
return arr.join('');
}
console.log( eatme("hello, world!"))
Fiddle