JavaScript-də regex-də ciblər
Ciblərin məzmunu yalnız əvəzetmə sətirində deyil, həm də regex-in özündə əlçatandır: biz bir şeyi cibə qoya bilərik, sonra isə düz regex-də deyə bilərik ki, burada həmin cibin məzmunu olmalıdır.
Ciblərin məzmunu onların nömrələri ilə əlçatandır,
qarşısında əks səlis işarəsi duran. Məsələn,
birinci cib belə əlçatan olacaq: \1,
ikinci cib belə - \2, üçüncü
- \3 və s.
Əminəm ki, yuxarıda yazılanlar sizə hələlik olduqca qarışıq görünür. Təəccüblü deyil, çünki ciblər - regex-in ən anlaşılması çətin yeridir. Gəlin nümunələr üzərində başa düşməyə çalışaq.
Nümunə
Tutaq ki, bizim belə bir sətirimiz var:
let str = 'aa bb cd ef';
Gəlin onda bir-birinin ardınca gələn iki eyni hərfin olduğu bütün yerləri tapaq. Məsələni həll etmək üçün istənilən hərfi axtaracağıq, onu cibə qoyacağıq, sonra isə növbəti simvolun həmin cibin məzmunu olub-olmadığını yoxlayacağıq:
let res = str.replace(/([a-z])\1/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! cd ef'
Nümunə
Tutaq ki, bizim belə bir sətirimiz var:
let str = 'asxca buzxb csgd';
Gəlin onda birinci və sonuncu hərflərin eyni olduğu bütün sözləri tapaq. Məsələni həll etmək üçün belə bir şablon yazacıq: hərf, sonra bir və ya daha çox hərf, və sonra birinci hərf kimi eyni hərf:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
Nəticədə dəyişənə aşağıdakı yazılacaq:
'! ! csgd'
Praktik tapşırıqlar
Bir sətir verilib:
let str = 'aaa bbb ccc xyz';
Bir-birinin ardınca gələn üç eyni hərfin olduğu bütün alt sətirləri tapın.
Bir sətir verilib:
let str = 'a aa aaa aaaa aaaaa';
Bir-birinin ardınca gələn iki və ya daha çox eyni hərfin olduğu bütün alt sətirləri tapın.
Bir sətir verilib:
let str = 'aaa aaa bbb bbb ccc ddd';
Bir-birinin ardınca gələn iki eyni sözün olduğu bütün alt sətirləri tapın.