След като завърших тренировъчния си лагер по софтуерно инженерство с Flatiron School, останах с усещането, че „това е само началото, имам още много да уча“. Докато проверявах уебсайтове, които предлагаха безплатни учебни програми за продължаване на образованието ми, реших да започна със сертифицирането за JavaScript структури от данни и алгоритми, хоствано от freeCodeCamp, така че да мога допълнително да затвърдя моите ванилни умения за JavaScript, както и да науча по-ефективни методи за решаване на алгоритми с курса. По време на писането на това, аз все още работя по въпросния курс и след кратък път попаднах на Regex (регулярни изрази), който събуди интереса ми. По време на първата фаза на началния лагер на Flatiron научих точно достатъчно regex в Ruby, за да мога да създам метод за първия си проект, който да приема само числа като вход за достъп до определен екземпляр на обект от клас, който създадох. Синтаксисът и начинът на JavaScript изглеждат много по-лесни за разбиране и прилагане и с техните вградени методи е лесно да се оцени дали знаците или числата в низ или число ще съвпадат или не (поне с моите настоящи познания).

Всъщност има много документация, когато става въпрос за използване на регулярни изрази, така че просто ще прегледам някои от основите в този блог, за да подчертая възможните употреби и някои от синтаксиса за постигане на идеалния резултат. Ще публикувам ресурси, където можете да научите повече за регулярните изрази в края на тази публикация. Също така имайте предвид, че ще разменям регулярен израз и регулярен израз в тази публикация, но регулярните изрази могат да бъдат наричани другаде като: регулярен израз, регулярен израз и регулярни изрази.

За да започнете, можете да научите прост синтаксис:

Можете да кодирате всички регулярни изрази, като първо обвиете знаците или думите, които или искате или не искате да съответстват, с низ, за ​​който бихте използвали регулярния израз по следния начин:

/example/

Можете да ги зададете като променлива във вашия код, което можете да направите по два начина:

Инициализиране и присвояване на променлива на това, което се нарича литерал на израз (литералния регулярен израз):

let regex = /chars/;

Или можете да използвате функцията конструктор на клас и да подадете аргумента на символите, които искате да оцените като низ:

let regexTwo = new RegExp('chars');
regexTwo;
// /chars/

Най-добре е да използвате последната операция за динамично програмиране, където регулярният израз, който трябва да бъде оценен, може да се промени (напр. въвеждане на потребител).

Оттук можете да използвате няколко различни метода за тестване или съвпадениена шаблона, който искате да оцените с низ или стойност (число).

.тест()

Можете да използвате regex и вградения метод на test() с regex, за да оцените дали даден низ има знаците или съвпада със знаците в зависимост от това какви специални знаци използвате във вашия regex. По-долу е даден основен пример за използване на този метод с регулярен израз и оценяване на низ:

С метода .test() първо използвате създадения регулярен израз и верижно върху метода .text и след това предавате аргумента на низа, който искате да тествате. Операцията .test() връща булево (вярно или невярно), което може да бъде полезно, ако трябва да създадете строг контролен поток в уеб приложението, където входът се записва например.

.съвпада()

Вместо да връща булева стойност, .match() всъщност ще върне частта от низа, която съвпада точно с вашия създаден регулярен израз. В примера по-долу насочих само към знака „r“, така че ще върне първото r в низа. Имайте предвид, че .match() ще върне масив. така че внимавайте как го използвате:

От моя фрагмент на конзолата на Chrome (моят пример по-горе) добавих два флага, които ми позволиха да върна всички символи „r“ от низа, който беше свързан с .match(). Съвпадението е малко по-различно от test(), където вместо да свързвате метода към регулярния израз, както при test(), вие свързвате метода към низа/стойността, които искате да оцените, и подавате регулярния израз като аргумент към метода за съвпадение. Освен това, без флагове или изрична дефиниция на регулярен израз, ако използвате операцията .match(), тя ще върне първия екземпляр на съвпадението на регулярния израз от низа, който искате да бъде оценен.

Ако забелязвате в моя горен пример, в края на регулярния ми израз имаше прикачени букви gi. gи i са това, което е известно като флагове.

Флаговете са знаци със специално значение, които можете да добавите към края на вашите шаблони на регулярен израз, за ​​да промените поведението на това как и какво вашият шаблон на регулярен израз ще върне от даден низ. Флагът g, използван в горния пример, означава „глобален“. Този флаг се използва за съпоставяне на всички модели, които се срещат в низа, който се оценява. И така, в моя пример по-горе създадох шаблона само с „r“ в него и когато използвам флага g, връщам всички срещания на знака „r“ в низа, следователно масивът от четири r, който беше върнат.

Въпреки че всъщност не се отнасяше за примера, добавеният флаг i трябваше да игнорира спецификата на регистъра, като по този начин щеше да върне всички срещания на r, които също бяха изписани с главни букви в предишния примерен фрагмент (ако имаше всеки с главни букви). Тези два флага изглежда са общи за използване, но можете да научите повече за други флагове тук.

Друго страхотно нещо за регулярния израз, за ​​което може да имате въпроси (ако не знаете за регулярния израз или как работи), е възможността да използвате последователни групи. Това, което имам предвид с това, е, че да кажем, че искате да филтрирате всички входове с числа в тях. Би било дълго и объркващо да се създаде модел на регулярен израз, който изглежда така:

let numberPattern = /0123456789/;

Всъщност можете да създадете нещо като зададен модел, който искате, като използвате скоби [] и тире/тире между (-), но цифрите/буквите трябва да се увеличават една спрямо друга. Да приемем, че трябва да намерите входове, които отговарят само на числови стойности. Можете да създадете модел на регулярен израз така:

let numberPat = /[0-9]/;

Този синтаксис ще означава диапазон и ще бъде разпознат като модел за съвпадение на всякакви числа между 0 и 9. Можете да направите това и с букви, като имате предвид да използвате диапазони, които се движат от най-малките до най-големите стойности с числа и след това да ги подредите по азбука при използване на букви. Този начин изглежда много по-чист и го намирам за по-лесен за разбиране.

Специални символи в регулярни изрази

Сега, след като прегледахме някои основи, научаването на специалните символи, които можете да използвате, може да помогне драстично при съпоставянето на вашия шаблон с регулярни изрази в JavaScript. Понякога в шаблоните се използват специални символи за манипулиране на действителния шаблон в регулярния израз. Пример, който ще дам, е с група низове, които завършват с едни и същи букви и започват с различни:

. (точка) е специален знак, в който можете да съвпадате по образец в рамките на низ, където думите в низ може да имат едни и същи думи в ред като стихотворение или рима:

let matchingWords = "Go to the bog in the fog and catch a frog";
matchingWords.match(/.og/g);

При изпълнение на горния код в моята конзола на браузъра ето резултатът:

В този пример направих грешка, когато моделът ми на регулярен израз търсеше само всички съвпадения, когато съвпадаше с три знака. на . отчита само 3 знака. За да коригираме това, можем да използваме друг специален знак, но ще трябва да премахнем точката.

Специалният знак + отчита проблеми като тези, които имахме в горния пример. Тъй като . е знакът за заместващи знаци, той ще търси всеки знак в позицията на шаблона, дори ако е интервал. Така че използването на знака + ни позволява да извикаме конкретен знак, в този случай буква или букви, и да променим поведението на нашия модел на регулярен израз, за ​​да прочетем един или повече символи в тази позиция, така да се каже:

Това постига желания резултат за връщане на всички екземпляри, които завършват на „og“ правилно, за разлика от предишния пример, използващ знака .(заместващ знак) в нашия регулярен израз.

Това са само няколко примера за това какво може да се направи с regex и има много по-сложни методи и причини да използвате регулярни изрази.

Моля, кажете ми какво мислите за моите примери и обяснения. Знам, че има още много неща за разглеждане относно регулярните изрази, но просто исках да споделя основите и силата на регулярните изрази за хора като мен, които може да са знаели за регулярния израз, които може да са уплашени от него или просто наистина имат нямаше никаква практика с тях. Надявам се, че това беше полезно и ще публикувам повече ресурси по-долу, включително страхотен измамен лист, на който попаднах, докато пиша това. Бих искал да чуя мисли или нещо, което бих могъл да направя по-добре, както и неща, които да разгледам за бъдещи идеи за блогове. Приятно хакване!

Ресурси:

MDN -› Регулярни изрази

CodeGauge -› Таблица с флагове на Regex

Debuggex -› JS Regex Cheatsheet