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