Привет, объясните пожалуйста логику строки ( /((\d)\s+\S+\s)\d\s+/, ‘$1’);
К сожалению сам не могу догнать как работает каждый символ в ней.
По отдельности прочитал и знаю что один ищет цифру, второй пробелы, третий не пробелы и так далее, а как они вместе дают результат (убирают 2 после ЛЮБЕРЦЫ) я не понимаю, объясните пожалуйста
var str = '140002 ЛЮБЕРЦЫ 2 ОКТЯБРЬСКИЙ ПР 123/4-115';
var newstr = str.replace( /((\d)\s+\S+\s)\d\s+/, '$1');
console.log(newstr);
Скобочки в регулярных выражениях выполняют 2 функции: группируют правила а так же “запоминают” строку которая соответствует правилу чтобы потом ее использовать в методах типа replace и exec. Это не единственная “особая” механика где специальные символы ипользуются в работе с регулярками. Вот тут документация про специальные символы в replace: String.prototype.replace() - JavaScript | MDN
Конкретно про твой случай. /((\d)\s+\S+\s)\d\s+/ тут есть 2 запоминающие группы: ((\d)\s+\S+\s) и (\d). В replace, соответственно, можно использовать строку которая соответствует первой группе с помощью символов $1, второй $2 и так далее. В демонстрации ниже я использую специальный набор символов $& (в документации по ссылке выше он описан) означающий всю строку подходящую под регулярку. Для демонстрации я заменю всю строку, соответствующую регулярке, строкой из
всей строки которая соответствует регулярке
через разделитель строки которая соответствует первой запоминающей группе
через разделитель строки которая соответствует второй запоминающей группе
Тут видно что все что между символами ___ , совпало с регуляркой. И какие именно подстроки соответствуют запоминающим группам $1: 2 ЛЮБЕРЦЫ, $2: 2. После этого думаю стало понятнее что var newstr = str.replace( /((\d)\s+\S+\s)\d\s+/, ‘$1’);это замена подстроки которая соответствует регулярке, подстрокой соответсвующей подрегуляке из запоминающих скобок.