Хорошие решения приходят в голову при чтении документации. Например, метод строки
split() в качестве разделителя может принимать не только строку, а и регулярное выражение.
Логика вашего скрипта: разбить текст по пробелу ИЛИ запятой ИЛИ точке. Регулярка для этого - группа символов в квадратных скобках:
/[ ,.]/
— будет соответствовать пробелу или запятой или точке.
Подвох в том, что могут получаться пустые строки как элементы массива. Например, из
"test one."
получится
["test", "one", ""]
Поэтому стоит пройтись по массиву, оставив в нём только строки ненулевой длины:
arr.filter(w => w.length > 0)
Ну и взять длину полученного массива.