Рубрики
Без рубрики

Узнайте регулярные выражения этого бесплатного курса

Beau Carnes Узнайте регулярные выражения этого бесплатного курса «Некоторые люди, когда столкнулись с проблемой, подумайте« Я знаю, я буду использовать регулярные выражения ». Теперь у них есть две проблемы ». -Jamie Завинскифор Некоторые люди, использующие регулярные выражения, могут быть проблемой. Но это не должно быть проблемой

Автор оригинала: FreeCodeCamp Community Member.

Beau Carnes.

Для некоторых людей, используя регулярные выражения могут быть проблемой. Но это не должно быть проблемой для вас. Эта статья является полным курсом регулярных выражений.

1. Вступление

Регулярные выражения или просто Regex, используются практически на всех языках программирования для определения шаблона поиска, которые можно использовать для поиска вещей в строке.

Я разработал Бесплатно, полный видео курс На Scrimba.com учить основы регулярных выражений.

Эта статья содержит курс в письменной форме. Но если вы предпочитаете посмотреть видео версию с интерактивными уроками, вы можете проверить это на Scrimba Отказ Разделы в этой статье соответствуют разделам в курсе SCIMBA.

Этот курс следует вместе с Regex Учебный план на FreeCodeCamp.org. Вы можете проверить это для кодирования задач и заработать сертификат.

Эти уроки сосредоточены на использовании Regex в JavaScript, но принципы применяются во многих других языках программирования, которые вы можете использовать. Если вы еще не знаете базовый JavaScript, это может быть полезно, если вы накройте его немного сначала. У меня также есть базовый курс JavaScript, который вы можете получить доступ к Scrimba и на FreeCodeCamp.org. YouTube Channel Отказ

Так что давайте начнем! Вы будете спасать день в кратчайшие сроки. ?

2. Использование метода теста

Чтобы соответствовать частям струн, использующих REGEX, нам нужно создавать шаблоны, которые помогут вам сделать это соответствие. Мы можем указать, что что-то является шаблоном Regex, поместив шаблон между косудами / , нравиться так /шаблон -Мы-желание к матче/ Отказ

Давайте посмотрим на пример:

// We want to check the following sentencelet sentence = "The dog chased the cat."
// and this is the pattern we want to match.let regex = /the/

Обратите внимание, как мы используем // указать, что мы ищем «» в нашем предложение Отказ

Мы можем использовать Regex Тест () Способ сказать, присутствует ли шаблон в строке или нет.

// String we want to testlet myString = "Hello, World!";
// Pattern we want to findlet myRegex = /Hello/;
// result is now truelet result = myRegex.test(myString);

3. Сопоставить литеральные струны

Давайте теперь найдем Вальдо.

let waldoIsHiding = "Somewhere Waldo is hiding in this text.";let waldoRegex = /Waldo/;
// test() returns true, so result is now also truelet result = waldoRegex.test(waldoIsHiding);

Обратите внимание, что в этом примере Waldoregex чувствителен к регистру, поэтому, если мы должны были написать /Waldo/ С нижнем регистр «W», то наша Результат будет ложным.

4. Сопоставьте буквальную строку с различными возможностями

Regex также имеет Или Оператор, который является |. персонаж.

let petString = "James has a pet cat.";
// We can now try to find if either of the words are in the sentencelet petRegex = /dog|cat|bird|fish/;
let result = petRegex.test(petString);

5. Игнорировать случай При сопоставлении

Пока что мы смотрели на модели, когда имеется случай буквы. Как мы можем сделать наши шаблоны Regex, чтобы быть нечувствительным к регистру?

Чтобы игнорировать случай, мы можем сделать это, добавив Я Флаг в конце шаблона, как и так /некоторые-образные/я Отказ

let myString = "freeCodeCamp";
// We ignore case by using 'i' flaglet fccRegex = /freecodecamp/i;
// result is truelet result = fccRegex.test(myString);

6. Извлечение совпадений

Когда мы хотим извлечь сопоставленное значение, которое мы можем использовать Матч () метод.

let extractStr = "Extract the word 'coding' from this string.";
let codingRegex = /coding/;
let result = extractStr.match(codingRegex);
console.log(result);
// Terminal will show: // > ["coding"]

7. Найти больше, чем первый матч

Теперь, когда мы знаем, как извлечь одно значение, и также возможно извлечь несколько значений с помощью G флаг

let testStr = "Repeat, Repeat, Repeat";
let ourRegex = /Repeat/g;
testStr.match(ourRegex); // returns ["Repeat", "Repeat", "Repeat"]

Мы также можем комбинировать G Флаг с Я Флаг, чтобы извлечь несколько совпадений и игнорировать корпус.

let twinkleStar = "Twinkle, twinkle, little star";
let starRegex = /twinkle/ig;// writing /twinkle/gi would have the same result.
let result = twinkleStar.match(starRegex);
console.log(result);
// Terminal will show: // > ["Twinkle", "twinkle"]

8. Сопоставьте что-нибудь с периодом подстановки

В Regex Отказ это персонаж подстановки, который будет соответствовать чему-либо.

let humStr = "I'll hum a song";
let hugStr = "Bear hug";
// Looks for anything with 3 characters beginning with 'hu'let huRegex = /hu./;
humStr.match(huRegex); // Returns ["hum"]
hugStr.match(huRegex); // Returns ["hug"]

9. Соответствовать одному символу с несколькими возможностями

Соответствие любому символу приятно, но что, если мы хотим ограничить соответствие до заданного набора символов? Мы можем сделать, используя [] внутри нашего регеляции.

Если у нас есть /B [AIU] G/ Это означает, что мы можем соответствовать «сумке», «Big» и «BUG».

Если мы хотим извлечь все гласные из предложения, вот как мы можем сделать это с помощью Regex.

let quoteSample = "Beware of bugs in the above code; I have only proved it correct, not tried it.";
let vowelRegex = /[aeiou]/ig;
let result = quoteSample.match(vowelRegex);

10. Сопоставлять буквы алфавита

Но что, если мы хотим сопоставить ряд писем? Конечно, давайте сделаем это.

let quoteSample = "The quick brown fox jumps over the lazy dog.";
// We can match all the letters from 'a' to 'z', ignoring casing. let alphabetRegex = /[a-z]/ig;
let result = quoteSample.match(alphabetRegex);

11. Матч номера и буквы алфавита

Письма хорошие, но что, если мы тоже хотим числа?

let quoteSample = "Blueberry 3.141592653s are delicious.";
// match numbers between 2 and 6 (both inclusive), // and letters between 'h' and 's'. let myRegex = /[2-6h-s]/ig;
let result = quoteSample.match(myRegex);

12. Соответствовать одному персонажам Не указано

Иногда легче указывать символы, которые вы не хотите смотреть. Они называются «отрицанными персонажами», а также в REGEOX, вы можете сделать это, используя ^ Отказ

let quoteSample = "3 blind mice.";
// Match everything that is not a number or a vowel. let myRegex = /[^0-9aeiou]/ig;
let result = quoteSample.match(myRegex);// Returns [" ", "b", "l", "n", "d", " ", "m", "c", "."]

13. Соответствовать символам, которые происходят один или несколько раз

Если вы хотите сопоставить символы, которые возникают один или несколько раз, вы можете использовать + .

let difficultSpelling = "Mississippi";
let myRegex = /s+/g;
let result = difficultSpelling.match(myRegex);// Returns ["ss", "ss"]

14. Соответствует символам, которые происходят ноль или более раз

Есть также * Контификатор Regex. Это соответствует даже 0 вхождению характера. Почему это может быть полезно? Большую часть времени это обычно в сочетании с другими персонажами. Давайте посмотрим на пример.

let soccerWord = "gooooooooal!";
let gPhrase = "gut feeling";
let oPhrase = "over the moon";
// We are trying to match 'g', 'go', 'goo', 'gooo' and so on. let goRegex = /go*/;
soccerWord.match(goRegex); // Returns ["goooooooo"]
gPhrase.match(goRegex); // Returns ["g"]
oPhrase.match(goRegex); // Returns null

15. Найти персонажей с ленивым совпадением

Иногда ваши образец могут иметь более одного результата. Например, скажем, я ищу образец в слове Титаник И мои подобранные значения должны начинаться с «T» и заканчиваться «я». Моими возможными результатами являются «Titani» и «Ti».

Вот почему Regex имеет концепции «жадного матча» и «ленивый матч».

Жадный матч находит Самый длинный возможный матч Из строки, которая соответствует шаблону Regex, это соответствует регенсу по умолчанию:

let string = "titanic";
let regex = /t[a-z]*i/;
string.match(regex);// Returns ["titani"]

Ленивый матч находит кратчайший возможный матч из строки, которая соответствует шаблону Regex и использовать его, нам нужно использовать ? :

let string = "titanic";
let regex = /t[a-z]*?i/;
string.match(regex);// Returns ["ti"]

16. Найти одну или несколько преступников в охоте

Теперь давайте посмотрим на вызов Regex. Нам нужно найти все преступники («C») в толпе. Мы знаем, что они всегда остаются вместе, и вам нужно надо написать регулярное выражение, которое найдет их.

let crowd = 'P1P2P3P4P5P6CCCP7P8P9';
let reCriminals = /./; // Change this line
let matchedCriminals = crowd.match(reCriminals);

Вы можете найти меня прогуливаться через Решение в этой скримбе отлив Отказ

17. Соответствие Начальные строковые шаблоны

Regex также позволяет сопоставлять шаблоны, которые находятся только в начале строки. Мы уже говорили о ^ Создание насажденного набора. Мы можем использовать тот же символ, чтобы найти совпадение Только в начале строки.

let calAndRicky = "Cal and Ricky both like racing.";
// Match 'Cal' only if it's at the beginning of a string. let calRegex = /^Cal/;
let result = calRegex.test(calAndRicky); // Returns true
let rickyAndCal = "Ricky and Cal both like racing.";
let result = calRegex.test(rickyAndCal); // Returns false

18. Соответствие заканчивая строковые шаблоны

Как насчет сопоставления шаблона в конце строки? Мы можем использовать $ для этого.

let caboose = "The last car on a train is the caboose";
// Match 'caboose' if it's at the end of a string.let lastRegex = /caboose$/;
let result = lastRegex.test(caboose); // Returns true

19. Сопоставьте все буквы и цифры

Ранее в частях 10 и 11 я показал вам, как мы можем сопоставить диапазоны букв и цифр. Если бы я попросил вас написать Regex, который соответствует всем буквам и цифрам и игнорирует их случаи, вы, вероятно, написали бы что-то вроде /[A-Z0-9]/GI И это точно правильно. Но это слишком долго.

Regeex имеет что называется «Урочные классы персонажей» , который в основном является сокращением для общего выражения Regex. Для сопоставления всех букв и цифр мы можем использовать \ W. и мы также получаем подчеркивание _ соответствует как бонус.

let quoteSample = "The five boxing wizards jump quickly.";
// Same as /[a-z0-9_]/gi to match a-z (ignore case), 0-9 and _let alphabetRegexV2 = /\w/g;
// The length of all the characters in a string// excluding spaces and the period. let result = quoteSample.match(alphabetRegexV2).length;
// Returns 31

20. Сопоставьте все, кроме буквы и цифры

Если мы хотим сделать противоположное и сопоставить все, что это не буква или число (также исключить подчеркивание _ ), мы можем использовать \ W.

let quoteSample = "The five boxing wizards jump quickly.";
// Match spaces and the periodlet nonAlphabetRegex = /\W/g;
let result = quoteSample.match(nonAlphabetRegex).length;
// Returns 6

21. Соответствовать всем номерам

ОК, как будто, если вы хотите только номера? Есть ли для этого класс состязания? Конечно, это \ D Отказ

let numString = "Your sandwich will be $5.00";
// Match all the numberslet numRegex = /\d/g;
let result = numString.match(numRegex).length; // Returns 3

22. Соответствовать всем не числам

Хотели бы вы наоборот и сопоставьте все не числа? Использовать \ D.

let numString = "Your sandwich will be $5.00";
// Match everything that is not a numberlet noNumRegex = /\D/g;
let result = numString.match(noNumRegex).length; // Returns 24

23. Ограничить возможные имена пользователей

Все идет нормально! Хорошо сделано для того, чтобы сделать это так далеко. Regex может быть сложно, так как это не самый легко читаемый путь к коду. Давайте теперь посмотрим на очень реальный пример и сделайте валидатор имени пользователя. В этом случае у вас есть 3 требования:

  • Если есть цифры, они должны быть в конце.
  • Письма могут быть строчными и прописными.
  • По крайней мере два персонажа длиной. Две буквы не могут иметь цифры.

Попробуйте решить это самостоятельно, и если вы обнаружите его трудным или просто хотите проверить ответ, Проверьте мое решение.

24. Match Whitespace

Можем ли мы сопоставить все пробелы? Конечно, мы можем использовать стенографию для этого тоже И это \ S.

let sample = "Whitespace is important in separating words";
// Match all the whitespaceslet countWhiteSpace = /\s/g;
let result = sample.match(countWhiteSpace);
// Returns [" ", " ", " ", " ", " "]

25. Соответствовать персонажам без пробела

Можете ли вы догадаться, как соответствовать всем персонажам небесштабы? Хорошо сделано, это \ S Действительно

let sample = "Whitespace is important in separating words";
// Match all non-whitespace characterslet countWhiteSpace = /\S/g;
let result = sample.match(countWhiteSpace);

26. Укажите верхнее и нижнее количество совпадений

Вы можете указать нижнее и верхнее количество совпадений с «Количество спецификаторов». Они могут быть использованы с {} Синтаксис, например {3,6} , где 3 нижняя граница и 6 Является ли верхняя привязанность к сопоставлению.

let ohStr = "Ohhh no";
// We want to match 'Oh's that have 3-6 'h' characters in it. let ohRegex = /Oh{3,6} no/;
let result = ohRegex.test(ohStr); // Returns true

27. Укажите только нижнее количество совпадений

Когда мы хотим указать только нижнюю границу, мы можем сделать это, пропустив верхнюю границу, например, соответствовать как минимум три символа, которые мы можем написать {3,} Отказ Обратите внимание, что нам все еще нужна запятая, даже когда мы не указываем верхний предел.

let haStr = "Hazzzzah";
// Match a pattern that contains at least for 'z' characterslet haRegex = /z{4,}/;
let result = haRegex.test(haStr); // Returns true

28. Укажите точное количество совпадений

В предыдущем разделе я упомянул, что нам нужна запятая в {3,} Когда мы указываем только нижнюю границу. Причина, когда вы пишете {3} Без запятой это означает, что вы ищете совпадать ровно 3 символа.

let timStr = "Timmmmber";
// let timRegex = /Tim{4}ber/;
let result = timRegex.test(timStr); // Returns true

29. Проверьте на всех или нет

Есть времена, когда вы можете указать возможное существование символа в вашем шаблоне. Когда письмо или номер не являются обязательными, и мы будем использовать ? для этого.

// We want to match both British and American English spellings // of the word 'favourite'
let favWord_US = "favorite";let favWord_GB = "favourite";
// We match both 'favorite' and 'favourite' // by specifying that 'u' character is optionallet favRegex = /favou?rite/; // Change this line
let result1 = favRegex.test(favWord_US); // Returns truelet result2 = favRegex.test(favWord_GB); // Returns true

30. Положительный и негативный полей

Посмотрим «Узоры, которые сообщают вашему JS, чтобы посмотреть, чтобы проверить на шаблоны дальше. Они полезны, когда вы пытаетесь найти несколько шаблонов в тех же строках. Там 2 типа Lookaeads – положительные и отрицательные.

Позитивное lookahead использует знак равно синтаксис

let quit = "qu";
// We match 'q' only if it has 'u' after it. let quRegex= /q(?=u)/;
quit.match(quRegex); // Returns ["q"]

Отрицательный lookahead использует ?! синтаксис

let noquit = "qt";
// We match 'q' only if there is no 'u' after it. let qRegex = /q(?!u)/;
noquit.match(qRegex); // Returns ["q"]

31. Повторно использовать шаблоны с использованием групп захвата

Давайте представим, что нам нужно для захвата повторяющегося шаблона.

let repeatStr = "regex regex";
// We want to match letters followed by space and then letterslet repeatRegex = /(\w+)\s(\w+)/;
repeatRegex.test(repeatStr); // Returns true

Вместо повторения (\ W +) В конце мы можем сказать Regex повторять шаблон, используя \ 1 Отказ Так же, как указано выше, можно снова написать как:

let repeatStr = "regex regex";
let repeatRegex = /(\w+)\s\1)/;
repeatRegex.test(repeatStr); // Returns true

32. Используйте сборные группы для поиска и замены

Когда мы находим матч, иногда удобно заменить его чем-то другим. Мы можем использовать заменить () Метод для этого.

let wrongText = "The sky is silver.";
let silverRegex = /silver/;
wrongText.replace(silverRegex, "blue");
// Returns "The sky is blue."

33. Удалить пробел от начала и конца

Вот немного вызов для вас. Напишите регулярное выражение, которое удалило бы любой пробел вокруг строки.

let hello = "   Hello, World!  ";
let wsRegex = /change/; // Change this line
let result = hello; // Change this line

Если вы застряли или просто хотите проверить мое решение, не стесняйтесь взглянуть на Scrimba отличается там, где я решу эту проблему .

34. Заключение

Поздравляю! Вы закончили этот курс! Если вы хотите продолжать узнать больше, не стесняйтесь оформить заказ Этот плейлист на YouTube , у этого есть много проектов JavaScript, вы можете создать.

Продолжайте учиться и спасибо за чтение!

Теперь вы готовы играть в Golf Golf. ?

Оригинал: “https://www.freecodecamp.org/news/learn-regular-expressions-with-this-free-course-37511963d278/”