Подробное объяснение и реальная борьба с регулярными выражениями

внешний интерфейс GitHub JavaScript игра Vue.js регулярное выражение jQuery ECMAScript 6

Create by jsliang on 2018-11-14 10:41:20
Recently revised in 2018-11-19 09:04:18


Привет друзья, если вы считаете, что эта статья неплохая, не забудьте датьstar, ВашstarЭто моя мотивация учиться!Адрес GitHub


【2019-08-16】Привет друзья, потому чтоjsliangБиблиотека документации подверглась рефакторингу, некоторые ссылки на эту статью могут быть битыми, иjsliangУ меня нет сил поддерживать старые статьи на стороне Nuggets, извините за это. Для тех, кому нужно получать последние статьи, щелкните адрес GitHub выше и перейдите в библиотеку документов, чтобы просмотреть скорректированные статьи.


 Регулярные выражения. Регулярные выражения, также известные как правила, позволяют компьютерам читать человеческие правила.
 Регулярные выражения громоздки, и чем больше вы их изучаете, тем более сумасшедшим вы себя чувствуете.
  Но опять же, это мощно. В моих глазах обычный — это чит-код, а приложение после изучения может сильно повысить эффективность вашей разработки.
  Итак, вы можете честно сражаться с монстрами, но вам будет удобнее программировать, когда вы его используете.

  Подводя итог,jsliangЯ написал эту статью, чтобы задокументировать свой импульс к обучению.
  С этой целью это также вдохновляет,jsliangНаписал мини-игру для ПК (пожалуйста, используйте компьютер, чтобы открыть сайт):


каталог


В чем разница между передней частью, которая не подбрасывается, и соленой рыбой~

содержание
каталог
Две интеграции
2.1 Общие правила
2.2 Правила сопоставления
2.3 Общие методы
Три регулярных рейса
3.1 Знакомство с правилами
3.2 Регулярный разбор
3.3 Регулярная практика
3.4 Улучшение: () соответствует детям
3.5 Улучшение: класс символов []
Четыре ретроспективных резюме
5 Исправления в статье

Две интеграции

содержание


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

  Избранные справочники/видео/руководства:


2.1 Общие регулярные выражения

содержание


  1. Проверить имя
  • От 2 до 9 китайских прозвищ:^[\u4e00-\u9fa5]{2,9}$
  1. подтвердите пароль
  • Это могут быть только буквы, цифры и символы подчеркивания, а длина не ограничена:^\w+$
  • разрешены строчные буквыa-z,прописная букваA-Z,номер0-9, подчеркивать_, Столяр-, а длина составляет от 6 до 18 цифр:/^[a-zA-Z0-9_-]{6,18}$/
  • Пароль должен содержать цифры + строчные буквы + прописные буквы, а длина — от 8 до 10 символов:^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  1. подтвердить электронную почту
  • Допускается символ, соответствующий [A-Za-z0-9_], за которым следует [A-Za-z0-9_-+.] +@+ Разрешить соответствие символа [A-Za-z0-9_], за которым следует [A-Za-z0-9_-.] +.+ Допускается почтовый ящик, который может иметь [A-Za-z0-9_-.] после символа, соответствующего [A-Za-z0-9_]:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  1. Подтвердить идентификатор
  • 18-значный идентификационный номер, мантисса — это число или буква X:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
  • 15- или 18-значный идентификационный номер, мантисса может быть числом и X или x:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  1. Подтвердить номер телефона
  • 11-значный номер мобильного телефона, начинающийся с 1 и второй цифрой 3/4/5/7/8:^1[3,4,5,7,8,9]\d{9}$
  • Мобильный номер:^134[0-8]\d{7}$|^(?:13[5-9]|147|15[0-27-9]|178|1703|1705|1706|18[2-478])\d{7,8}$
  • Тел:^(?:133|153|1700|1701|1702|177|173|18[019])\d{7,8}$
  • Юником номер:^(?:13[0-2]|145|15[56]|176|1704|1707|1708|1709|171|18[56])\d{7,8}|$

2.2 Правила сопоставления

содержание


персонаж описывать пример
\ Помечает следующий символ как специальный символ, буквенный символ, обратную ссылку или восьмеричный escape-символ. \nпредставляет новую строку,\dсоответствует числам от [0-9]
^ Соответствует начальной позиции входной строки. ^abcУказывает совпадающие строки, начинающиеся с abc
$ Соответствует концу входной строки. ^\d$означает совпадение с числом [0-9]
* Соответствует предыдущему подвыражению ноль или более раз. zo*может соответствоватьzилиzoo.*Эквивалентно{0,}.
+ Соответствует предыдущему подвыражению один или несколько раз. zo+может соответствоватьzoилиzoo, но не совпадаетz.+Эквивалентно{1,}.
? Соответствует предыдущему подвыражению ноль или один раз. do(es)?может соответствоватьdoesилиdoesсерединаdo.?Эквивалентно{0,1}.
{n} nявляется неотрицательным целым числом. Совпадение определенное количество n раз. o{2}не может соответствоватьBobсерединаo, но совпадаетfoodдва изo.
{n,} nявляется неотрицательным целым числом. Совпадение не менее n раз. o{2,}не может соответствоватьBobсерединаo, но совпадаетfooooodвсе вo.o{1,}Эквивалентноo+.o{0,}эквивалентноo*.
{n,m} И m, и n — неотрицательные целые числа, где n Например,o{1,3}будет соответствоватьfoooooodПервые три о в .o{0,1}Эквивалентноo?. Обратите внимание, что между запятой и двумя числами не должно быть пробелов.
? когда персонаж сразу следует за любым другим квалификатором*,+,?,{n},{n,},{n,m}позже (напр.+?), соответствующий шаблон не является жадным. Нежадный режим соответствует как можно меньшей части искомой строки, в то время как жадный режим по умолчанию соответствует максимально возможной части искомой строки. для струнoooo,o+?будет соответствовать одномуoo+будет соответствовать всемo.
. совпадение, кроме\nлюбой одиночный символ, кроме ..очень мощныйметасимволы, пожалуйста, используйте с осторожностью. Включить\nлюбой символ, пожалуйста, используйте(.|\n)режим. Чтобы соответствовать самой десятичной точке, используйте\..a.eможет соответствоватьnaveсерединаaveили совпадениеwaterсерединаate
(子表达式) Отмечает начало и конец подвыражения. (\w)\1может соответствоватьdeepсерединаee
(?:子表达式) совпадениеz подвыражениеНо результат совпадения не извлекается, что означает, что это совпадение без выборки и не сохраняется для последующего использования. Это использование символа или(|)Полезно комбинировать части узора. industr(?:y|ies)является эквивалентомindustry|industriesНо более сокращенные регулярные выражения.
(?=子表达式) Общее использование:××(?=子表达式), это значит××Последние условные ограничения?=Назад子表达式 Windows(?=95|98|NT|2000)может соответствоватьWindows2000серединаWindows, но не совпадаетWindows3.1серединаWindows.\w+(?=\.)может соответствоватьHe is. The dog ran. The sun is out.серединаis,ranиout
(?!子表达式) похожий на(?=子表达式), что указывает на то, что он не равен следующему子表达式. Windows(?!95|98|NT|2000)может соответствоватьWindows3.1серединаWindows, но не совпадаетWindows2000серединаWindows.\b(?!un)\w+\bможет соответствоватьunsure sure unity usedсерединаsureиused
(?<=子表达式) То же. (?<=95|98|NT|2000)Windowsможет соответствовать2000WindowsсерединаWindows, но не совпадает3.1WindowsсерединаWindows.(?<=19)\d{2}\bможет соответствовать1851 1999 1950 1905 2003середина99,50и05
(?<!子表达式) То же. (?<!95|98|NT|2000)Windowsможет соответствовать3.1WindowsсерединаWindows, но не совпадает2000WindowsсерединаWindows.\b(?!un)\w+\bможет соответствоватьunsure sure unity usedсерединаsureиused
x|y Совпадение x или y. z|foodможет соответствоватьzилиfood.(z|f)oodзатем сопоставьтеzoodилиfood.
[xyz] коллекция персонажей. Соответствует любому из включенных символов. [abc]может соответствоватьplainсерединаa.
[^xyz] Обеспечить регресс. Соответствует любому не включенному символу. Например,[^abc]может соответствоватьplainсерединаp.[^aei]совпадениеreignсерединаr,gиn
[a-z] диапазон символов. Соответствует любому символу в указанном диапазоне. [a-z]может соответствоватьaприбытьzЛюбой строчный алфавитный символ в диапазоне. Уведомление:[A-Z]Совпадать только с заглавными буквами английского языка
[^a-z] Обеспечить регресс. Соответствует любому произвольному символу, не входящему в указанный диапазон. [^a-z]может соответствовать любомуaприбытьzЛюбой символ в диапазоне.
\b Соответствует границе слова, то есть положению между словом и пробелом. er\bможет соответствоватьneverсерединаer, но не совпадаетverbсерединаer.
\B Сопоставьте границы слов. er\Bможет соответствоватьverbсерединаer, но не совпадаетneverсерединаer.
\cx Соответствует управляющему символу, заданному x. Например,\cMсоответствовать одномуControl-Mили возврат каретки.xЗначение должно бытьA-Zилиa-zодин. В противном случае будетcрассматривается как буквальныйcперсонаж.
\d Совпадение с числовым символом. Эквивалент [0-9]. 4 = IVсередина4
\D Соответствует нечисловому символу. Эквивалент [^0-9]. 4 = IVсередина,=,,IиV
\f Соответствует символу перевода формы. Эквивалент \x0c и \cL. [\f]{2,}может соответствовать\f\f\fсередина\f\f\f.
\n Соответствует символу новой строки. Эквивалентно \x0a и \cJ. \r\n(\w+)может соответствовать\r\nThese are\ntwo lines.середина\r\nThese
\r Соответствует возврату каретки. Эквивалент \x0d и \cM. \r\n(\w+)может соответствовать\r\nThese are\ntwo lines.середина\r\nThese
\s Соответствует любому пробельному символу, включая пробелы, табуляции, переводы форм и многое другое. Эквивалент [ \f\n\r\t\v]. \w\sможет соответствоватьID A1.3серединаD
\S соответствует любому непробельному символу. Эквивалентно [^ \f\n\r\t\v]. \s\Sможет соответствоватьint __ctrсередина_
\t Соответствует символу табуляции. Эквивалент \x09 и \cI. (\w+)\tможет соответствоватьitem1\titem2\tсерединаitem1\tиitem2\t
\v Соответствует символу вертикальной табуляции. Эквивалентно \x0b и \cK. [\v]{2,}может соответствовать\v\v\vсередина\v\v\v
\w Соответствует любому символу слова, включая подчеркивание. Эквивалентно[A-Za-z0-9_]. ID A1.3серединаI,D,A,1и3
\W соответствует любому символу, не являющемуся словом. Эквивалентно[^A-Za-z0-9_]. ID A1.3середина,..

2.3 Общие методы

содержание


 Обычный JavaScript по умолчанию: если обычное сопоставление прошло успешно, оно завершится, и сопоставление не будет продолжено. Если вы хотите найти все, вам нужно добавить логотипg(глобальное совпадение)


  1. test()

правило: Регулярное выражение ищет значение, указанное в строке, для соответствия строке. Возврат, если совпадение успешноtrue, вернуться, если совпадение не удалосьfalse.
использование:正则.test(字符串)
кейс:

фрагмент кода js

var str = "123abc";
var re = /\D/; // 匹配非数字
if(re.test(str)) {
  console.log("不全是数字!");
} else {
  console.log("全是数字!");
}

Консоль:不全是数字


  1. search()

правило: регулярно сопоставлять строку, если совпадение успешное, вернуть позицию, где совпадение было успешным, если совпадение не удалось, вернуть-1
использование:字符串.search(正则)
кейс:

фрагмент кода js

var str = "abcdef";
var re1 = /d/i; // 3
var re2 = /h/i; // -1
console.log(str.search(re1));
console.log(str.search(re2));

Консоль:
3
-1


  1. match()

правило: Регулярно соответствует строке. Если совпадение успешное, возвращает массив успешных совпадений. Если совпадение не удается, возвращаетnull
использование:字符串.match(正则)
кейс:

фрагмент кода js

var str = "123fadf321dfadf4fadf1"; //(4) ["123", "321", "4", "1"]
var re = /\d+/g;
console.log(str.match(re));

Консоль:(4) ["123", "321", "4", "1"]


  1. replace()

правило: регулярно сопоставляет строку и заменяет успешно сопоставленную строку новой строкой. Первый параметр функции — успешно совпадающий символ, второй параметр: это может быть строка или функция обратного вызова.
использование:字符串.replace(正则,新的字符串)
кейс:

  • Простой случай

фрагмент кода js

var str = 'aaa';
var re = /a+/g;
str = str.replace(re, "b");
console.log(str); // b

Консоль:b


  • Фильтрация деликатных слов

фрагмент html-кода

<div class="filtering-of-sensitive-words">
  <h3>敏感词过滤</h3>
  <p>替换前</p>
  <textarea name="before" id="" cols="30" rows="10"></textarea>
  <input type="button" value="确定" id="input1">
  <p>替换后</p>
  <textarea name="after" id="" cols="30" rows="10"></textarea>
</div>

фрагмент кода js

window.onload = function() {
  var aT = document.getElementsByTagName("textarea");
  var oInput = document.getElementById("input1");

  var re = /非诚|中国船|监视之下/g;

  oInput.onclick = function() {
    // 一律单个替换: aT[1].value = at[0].value.replace(re, "*");
    // 多个替换:
    aT[1].value = aT[0].value.replace(re, function(str) {
      var result = "";
      for(var i=0; i<str.length; i++) {
        result += "*";
      }
      return result;
    });
  }
}

Console
Перед заменой:非诚勿扰在中国船的监视之下寸步难行
После замены:**勿扰在***的****寸步难行


Три регулярных рейса

содержание


 Что такое регулярное выражение? Регулярные выражения. Регулярные выражения, также известные как правила, позволяют компьютерам читать человеческие правила.
 Регулярные выражения используются для управления строками.

Цели обучения этой статьи:

  1. Изучайте регулярные выражения JavaScript с помощью небольших историй
  2. Пусть небольшие партнеры понимают значение основных регулярных выражений и сами пишут регулярные выражения

3.1 Знакомство с правилами

содержание


 Как выглядит обычный? как пользоваться? Это очень просто, три строки кода помогут вам начать

var regex = /^\d+$/;
var myNumber = '123';
console.log(regex.test(myNumber)); // true

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

 Однажды вор Сяобай подарил вору Сяохэю коробку, похожую на русскую матрешку, с 3-мя уровнями вложенности:

Более того, они договорились о методе извлечения пароля транзакции: Xiaobai предоставит Xiaohei строку строк, Xiaohei нужно только узнать все связанные числа в строке, а затем склеить их в новый массив, первый из массив.Одним элементом является пароль для первого ящика и так далее...

"abc123def456hash789" -> [123, 456, 789] -> [пароль внешнего ящика 1, пароль среднего ящика 2, пароль самого внутреннего ящика 3]

  Теперь предположим, что Black Thief использует JavaScript для обычного поиска:

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>正则表达式</title>
</head>

<body>
  <p>正则表达式 | <b>jsliang</b> 学习记录</p>

  <script>
    window.onload = function () {
      var str = "abc123def456hash789"

      function findNum(str) {
        var arr = [];
        var tmp = '';
        for (var i = 0; i < str.length; i++) {
          if (str.charAt(i) >= "0" && str.charAt(i) <= "9") {
            tmp += str.charAt(i);
          } else {
            if (tmp) {
              arr.push(tmp);
              tmp = "";
            }
          }
        }
        if (tmp) {
          arr.push(tmp);
          tmp = "";
        }
        return arr;
      }
      console.log(findNum(str));
    }
  </script>
</body>

</html>

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

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>正则表达式</title>
</head>

<body>
  <p>正则表达式 | <b>jsliang</b> 学习记录</p>

  <script>
    window.onload = function() {
      var str = "abc123def456hash789";
      function findNum(str) {
        return str.match(/\d+/g);
      }
      console.log(findNum(str));
    }
  </script>
</body>

</html>

 Сяо Хэй сразу чувствует, что он очень хорош, с ним что-то не так? ! Всего одной строкой кода вы можете решить большую строку кодов, используемых при поиске строк!

 Тогда, говоря об этом, друзья должны иметь простое представление об обычном, называемом горячим железом, Вот так~


3.2 Регулярный разбор

содержание


 В приведенном выше примере вор Сяохэй используетstr.match(/\d+/g), что решает проблему получения пароля от ящика.
  Итак, что означает эта строка регулярных выражений? Давайте оставим это в стороне и разберем простую строку:

^[a-z0-9_-]{6,12}$

Во-первых,^Указывает начальную позицию совпадающей строки в сочетании со следующим[a-z0-9_-]Указывает, что строка может начинаться сa-zбуквы,0-9числа,_подчеркивать,-Столяр.
Потом,[a-z]указывает на совпадениеa-zлюбая отдельная буква;[0-9]указывает на совпадение0-9любой одиночный номер;[_]Указывает на соответствующее подчеркивание;[-]Указывает на соответствующий разъем-. Итак, соединяя предыдущие,[a-z0-9_-]Указывает, что строка может содержать数字,字母,_,-Эти четыре формы строк.
Потом,{6, 12}Указывает, что длина строки6-12немного.
Наконец,$указывает конечный маркер,^противоположный.

^и$При совместном использовании это означает точное совпадение.

  В конце концов, друзья должны были догадаться о назначении этого регулярного выражения:Подтвердить имя пользователя. Имя пользователя может содержать только символы, цифры и символы подчеркивания.(_)и связующие символы(-), а длина имени пользователя может составлять до 12 цифр, а самая короткая длина — 6 цифр.

  Итак, как это используется в JavaScript? мы обычно используем/正则表达式/Две косые черты для переноса регулярного выражения, которое мы собираемся написать:

var reg = /^[a-z0-9_-]{6,12}$/

 Послушайте, это правило, если вам нужно, чтобы оно соответствовало строкеstr. Затем просто используйте в кодеtest()Методы испытаний:

var str = 'abc-cba_abc';
var reg = /^[a-z0-9_-]{6,12}$/;
console.log(reg.test(str)); // true

  Таким образом мы сообщаем JavaScript:regпройти черезtest()метод проверкиstrЭто соответствуетregправила, если они совпадают, возвращаютсяtrue, если нет, вернутьfalse. Здесь возвращаетсяtrue, потому что нашstrсоответствуетregобычный.

test()метод и другие полезные методы были интегрированы в[2.3 Обычный метод JS]Это внутри, и друзья, которые не могут ждать, могут щелкнуть ссылку, чтобы проверить это первым.

  Полный код размещен ниже:

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>正则表达式</title>
</head>

<body>
  <p>正则表达式 | <b>jsliang</b> 学习记录</p>

  <script>
    window.onload = function() {
      var str = 'abc-cba_abc';
      var reg = /^[a-z0-9_-]{6,12}$/;
      console.log(reg.test(str)); // true
    }
  </script>
</body>

</html>

3.3 Регулярная практика

содержание


 Благодаря вышеуказанному пониманию у друзей должно быть начальное понимание регулярных выражений.Console 1 - Console 3, которыеtrue, которыеfalse:

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>正则表达式</title>
</head>

<body>
  <p>正则表达式 | <b>jsliang</b> 学习记录</p>

  <script>
    window.onload = function() {
      var str = "Cheer for yourself";
      var reg1 = /^Cheer/;
      var reg2 = /yourself$/;
      var reg3 = /for/;
      console.log(reg1.test(str));
      console.log(reg2.test(str));
      console.log(reg3.test(str));
    }
  </script>
</body>

</html>

  Ответ заключается в том, что все три возвращаютсяtrue. в этих трехconsole.log()середина:
  Первым определить, начинается ли строка сCheerначало;
  Второй оценивает, начинается ли строка сyourselfконец;
 Третий определяет, содержит ли строкаfor.
 В повседневной работе этот метод часто используется для оценки пользовательского ввода.stringСодержит ли он какой-либо текст, например:jsliang 是傻*, надо судить и заменить наjsliang 是帅哥, что касается того, как заменить чувствительные слова, друзья, которые не могут ждать, могут пойти в[2.3 Обычный метод JS]Узнай сначала~


3.4 Улучшение: () соответствует детям

содержание


  Так называемые совпадающие подпункты на самом деле являются нашими скобками(). Он также имеет другое значение, называемое операциями группировки. Ниже мы цитируем главы[2.2 Правила регулярных выражений]Определение в:

выражение Парафраз использование
(子表达式) Отмечает начало и конец подвыражения. (\w)\1может соответствоватьdeepсерединаee

 Если просто объяснить смысл, друзья могут запутаться. Итак, начнем с кода:

фрагмент кода js

var str = "2018-11-28";
var re = /(\d+)(-)/g;
str = str.replace(re, function($0, $1, $2){
  // 第一个参数:$0(母亲)
  // 第二个参数:$1(第一个孩子)
  // 第三个参数:$2 (第二个孩子)
  console.log("$0:" + $0); // 2018- 以及 11-
  console.log("$1:" + $1); // 2018 以及 11
  console.log("$2:" + $2); // - 以及 -
  return $1 + '.';
});
console.log(str); // 2018.11.28

Консоль:
$0:2018-
$1:2018
$2:-
$0:11-
$1:11
$2:-
2018.11.28

во-первых, давайте разберем это регулярное выражение:

  • /(\d+)/Представляет любое одно или несколько чисел
  • /(-)/Указывает совпадающие символы-
  • gозначает более одного совпадения

  Таким образом, это обычное значение означает совпадение один или несколько раз数字-строка формы.  потом, мы использовалиreplace()метод. мы наблюдаемConsoleРаспечатанные результаты показывают, что:$0наш обычныйvar re = /(\d+)(-)/gсоответствоватьvar str = "2018-11-28"Полученный результат, здесь мы совпали дважды, а именно2018-и11-;$1одна из наших скобок(\d+), так что результат2018а также11;$2наша вторая скобка(-), так что результат-а также-.
Наконец, что мы делаем,$1плюс., и вернуть окончательный результат вstr, что является окончательным результатом:2018.11.28.

упоминается здесьreplace()метод, подробнее:Нажмите, чтобы перейти


【Снова】Если друзья все еще чувствуют себя неудовлетворенными, то давайте возьмем еще один абзац:

фрагмент кода js

var str = "abc";
var re = /(a)(b)(c)/;
console.log(str.match(re));

Console
(4) ["abc", "a", "b", "c", index: 0, input: "abc", groups: undefined]

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


3.5 Улучшение: класс символов []

содержание

 Что такое класс персонажа?
 Так называемый класс символов представляет собой группу подобных элементов[]Все такие квадратные скобки представляют символ.
  Без лишних слов начнем с кода:

фрагмент кода js

var str1 = "abcd";
var re1 = /a[bcd]c/;
console.log(re1.test(str1)); // true

var str2 = "abc";
var re2 = /a[^bcd]c/;
console.log(re2.test(str2)); // false

var str3 = "a.c";
var re3 = /a[a-z0-9A-Z]c/;
console.log(re3.test(str3));  // false

Console
true
false
false

во-первых, мы сначала разбираем первую часть:

  • /a/: соответствует буквамa
  • /[bcd]/: соответствует буквамbcdодин из
  • /[d]: соответствует буквамd

Итак, видно, что мы используемre1тестироватьstr1если он совпадает, он вернетсяtrue.

потом, разбираем вторую часть:

  • ^если написано в[]Слово внутри означает исключение. представляет здесьaиcсередина не может бытьbcdлюбой из

  Итак, видно, что мы используемre2тестироватьstr1если он совпадает, он вернетсяfalse.

Наконец, разбираем третью часть:

  • /[a-z0-9A-Z]/: соответствует строчным буквамa-z, или число0-9, или заглавные буквыA-Z. которыйaиcНаверху могут быть только те символы, которые соответствуют земле.

  Итак, видно, что мы используемre3тестироватьstr3если он совпадает, он вернетсяfalse.


Четыре ретроспективных резюме

содержание


 В Главе 3 мы представили силу, рассказали, как ее использовать, и с помощью небольших упражнений()а также[]Объяснение , пусть друзья узнают больше об использовании регулярности в JavaScript...
но!
Это конец? !
Нет!
так какjsliangВремя ограничено, поэтому невозможно представить удовольствие от регуляризации и то, как использовать регуляризацию на работе для повышения эффективности работы один за другим.
  Итак, в главе 2【Интеграция】середина,jsliangИнтегрируйте онлайн-ресурсы и запишите некоторые часто используемые инструменты регуляризации. В нем много вещей, которые не рассматриваются в этой статье. Заинтересованные друзья могут попытаться углубить свое понимание регуляризации один за другим.

———— На конец————
  При написании этой статьиjsliangPlay Sex Dafa написал следующую игру (пожалуйста, используйте компьютер для просмотра):


5 Исправления в статье

содержание


  1. Наггетс Обзор 2018-11-20
  • тип: Ошибка содержания
  • обратная связь с пользователями:Kaelalv
  • Содержание отзыва: При разборе этого кода в содержании 3.2:
var str = 'abc-cba_abc'; 
var reg = /^[a-z0-9_-]{6,12}$/; 
console.log(reg.test(str)); // true 

 Автор допускает ошибку, если он неправильный, возвращает true, если не совпадает, если правильный, возвращает false, если не совпадает.

  • Обработка обратной связи: исправлено, спасибо за отзыв

Ребята, если вы считаете, что эта статья неплохая, не забудьте поставить лайк на Nuggets и перейти на GitHub.star, ВашstarЭто моя мотивация учиться!Адрес GitHub


知识共享许可协议
jsliangбиблиотека документацииЗависит отЛян ЦзюньронгиспользоватьCreative Commons Attribution-NonCommercial-ShareAlike 4.0 Международная лицензияЛицензия.
на основеGitHub.OM/l ЯнДжун Рон…Создание работ выше.
Права на использование, отличные от разрешенных в настоящем Лицензионном соглашении, могут быть получены отCreative Commons.org/licenses/не…получено в.