Регулярные выражения

@alexeycorr

Регулярные выражения

регэксп, регулярка, рег

1951

Стивен Коул Клини

Клини, Стивен Коул
perl in work

What is it?

/^(?:[A-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[A-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[- -!#-[]-]|[- -])*")@(?:(?:[a-z-яА-ЯёЁ0-9](?:[a-z-яА-ЯёЁ0-9-]*[a-z-яА-ЯёЁ0-9])?.)+[a-z-яА-ЯёЁ0-9]{2,}(?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[- -!-ZS-]|\[- -])+)])$/i

Я вышел в интернет с таким вопросом

Синтаксис

Флаги

Из чего состоят

  1. Символы
  2. Операции

Символьные классы


        \d || [0-9]
        \s || [\t\r\n\f\v]
        \w || [A-Za-z0-9_]
      

        \D || [^0-9]
        \S || [^\t\r\n\f\v]
        \W || [^A-Za-z0-9_]
      

Юникод


      'a'.length // 1 или 2 байта
      '🖖'.length // 2 или 4 байта
    

Флаг u - включает специальный режим для работы с юникодом
p{...} - специальный класс который работает в режиме unicode

Метасимволы


      /./.test('spongebob'); // true
      /./.test('\r\n'); // false
      /./s.test('\r\n'); // true
      /^star wars$/.test('star wars'); // true
      /^star wars$/.test('star wars\nforever'); // false
      /^star wars$/m.test('star wars\nforever'); // true
    

Метасимволы


      /\bSkillbox\b/.test('Skillbox or GeekBrains'); // true
      /\bSkillbox\b/.test('GeekSkillbox'); // false
      /\bSkill\b/.test('Skillбокс'); // true
      '150.000'.replace(/./g, ' '); // '       '
      '150.000'.replace(/\./g, ' '); // '150 000'
      [ \ ^ $ . | ? * + ( )
    

Перечисление


      /[qwerty]/.test('rty'); // true
      [A-G\d]
      /[а-я]/.test('ё'); // false
      /[.]/.test('найдется всё!'); // false
      /[^ничего]/.test('всё'); // true
      /[ничего^]/.test('^');
    

Квантификаторы


      /Skil*/.test('Ski'); // true
      /Skil+/.test('Skilllll'); // true
      /colou?r/.test('color'); // true
      /colou?r/.test('colour'); // true
    

Квантификаторы


      /kek{7}/.test('kekkkkkkk'); // true
      /kek{1,7}/.test('kek'); // true
      /kek{3,}/.test('kekkkkkk'); // true
      /lo{,5}l/.test('loooool');
    

Квантификаторы: жадные и ленивые


      ('oooo').match(/o+/); // oooo
      ('хочу "найти" все "слова" в "кавычках"').match(/".+"/g);
      '"найти" все "слова" в "кавычках"'
      ('хочу "найти" все "слова" в "кавычках"').match(/".+?"/g);
      '"найти" "слова" "кавычках"'
      ('oooo').match(/o+?/);
      'o'
      ('oooo').match(/o*?/);
      ''
    

Группировка


      /(\+7|8)(\d3)\d7/.exec('88002000600');
      ['88002000600', '8', '800'];
      /(?<region>\+7|8)(?<code>\d3)\d7/.exec('88002000600');
      groups.region // 8; groups.code // 800
      /(?:\+7|8)(?:\d3)\d7/.exec('88002000600');
      ['88002000600'];
    

Обратные ссылки


      "Just don't it".match(/['"](.+?)['"]/g) // "Just don'
      "Just don't it".match(/(['"])(.+?)\1/g); // "Just don't it"
      "Just don't it".match(/(?<quote>['"])(.+?)\k<quote>/g);
    

Методы RegExp


      regexp.exec(str); // null || ['все совпадение', $1, $2]
      regexp.test(str); // Boolean
    

Методы String


      str.match(regexp); // null || ['все совпадение', $1, $2]
      str.replace(regexp, replacement);
      str.search(regexp); // -1 || позиция совпадения
      str.split(regexp);
    

Метод replace


      str.replace(regexp, replacement);
    
В строке замены можно использовать спецсимволы:

Практика

srt.match()

Практика

srt.match()

Ну вот и всё!

Подписывайтесь, ставьте лайки!

GitHub Instagram Telegram @alexeycorr