Групи в самата регулярка в JavaScript
Съдържанието на групите е достъпно не само в низа за замяна, но и в самата регулярка: ние можем да поставим нещо в група, а след това директно в регулярката да кажем, че тук трябва да стои съдържанието на тази група.
Съдържанието на групите е достъпно по техните номера,
пред които има обратна наклонена черта. Например,
първата група ще бъде достъпна ето така: \1,
втората група ето така - \2, третата
- \3 и така нататък.
Убеден съм, че всичко написано по-горе все още е доста неясно за вас. Това не е изненадващо, тъй като групите са най-малко разбираемото място в регулярните изрази. Нека да разгледаме примери.
Пример
Нека имаме следния низ:
let str = 'aa bb cd ef';
Нека намерим в него всички места, в които има две еднакви букви една след друга. За решаване на задачата ще търсим произволна буква, ще я поставяме в група, а след това ще проверяваме дали следващият символ е съдържанието на тази група:
let res = str.replace(/([a-z])\1/g, '!');
В резултат в променливата ще се запише следното:
'! ! cd ef'
Пример
Нека имаме следния низ:
let str = 'asxca buzxb csgd';
Нека намерим в него всички думи, в които първата и последната буква са еднакви. За решаване на задачата ще напишем следния шаблон: буква, следвана от още една или повече букви, а след това същата буква като първата:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
В резултат в променливата ще се запише следното:
'! ! csgd'
Практически задачи
Даден е низ:
let str = 'aaa bbb ccc xyz';
Намерете всички поднизове, в които има три еднакви букви една след друга.
Даден е низ:
let str = 'a aa aaa aaaa aaaaa';
Намерете всички поднизове, в които има две или повече еднакви букви една след друга.
Даден е низ:
let str = 'aaa aaa bbb bbb ccc ddd';
Намерете всички поднизове, в които има две еднакви думи една след друга.