⊗jsSpREEP 129 of 294 menu

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.

csitkasvhi