Կարմանները ռեգուլյար արտահայտության մեջ 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';
Գտեք բոլոր այն ենթատողերը, որոնցում կան երկու նույնական բառ իրար հաջորդող: