Столкнулся с такой проблемой, что метод replaceAll() не работает, но я ошибался. Надеюсь помогу тебе решить твою проблему.
Я писал статью на тему «Как заменить двойные пробелы на одинарные?». Задача проще не придумаешь. У меня была строка для экспериментов, которую я скопировал из редактора статей CMS WordPress. Я заранее сделал в строке три двойных пробела. Выглядела она так:
var stroka = "Я люблю работать со строковым типом данных."

Вызываю на строке метод replaceAll() и вижу, что ничего не изменилось:
stroka.replaceAll(" ", " ")
В ответ те же самые двойные пробелы. Сознание немного помутнело от того, что даже на JavaScript положиться уже нельзя. Уныние, разочарование. Вроде читаешь официальный мануал, а на деле получаешь «не то».

Стал разбираться с проблемой. Т. к. я немного знаком с таким понятием как ASCII (American standard code for information interchange), то первое что пришло в голову — «мои клавиатурные пробелы в строках в методе replaceAll() могут каким то образом отличаться от скопированных из редактора». Мне об этом легко говорить т. к. кроме пробелов ничего больше не сравнивалось.
Решил создать дополнительную строковую переменную в которую вводил символы двойных пробелов с клавиатуры.

Я знал, что существуют печатные и непечатные символы, которые имеют свои уникальные КОДЫ СОПОСТАВЛЕНИЯ. Например, спецсимволы «переноса строки» и «возврата каретки«, которые используются во всех редакторах кода. Именно поэтому существует такое понятие как КОДИРОВКА СИМВОЛОВ. То есть помимо графического / логического представления, есть уникальное числовое представление любого символа в IT.
Я прогнал обе строки на получение СИМВОЛЬНЫХ КОДОВ. И вот что получилось:
massiv.map(i => [i, i.charCodeAt()])

Array.from(str).map(i => [i, i.charCodeAt()])

В моей строке было два символьных кода — 32, 32
А в строке из Вордпресс была пара — 160, 32
Теперь всё встало на свои места. Метод замены пытается отыскать пару «32, 32», но не находит, потому что её просто не существует в первоначальной строке. Но стоит подать правильную пару «160, 32», как результат становится предсказуемым — выполненным правильно. Пару пробелов «160, 32» скопировал уже из консоли.

Надеюсь эта публикация откроет новый взгляд на мир символов в IT.

