пиши на фронт
Увидев название, вы можете задаться вопросом, почему не 30 минут?
Потому что моя статья пестрит картинками и текстами, это очень страшно, брат, на самом деле ты можешь понять это менее чем за 30 минут.
Вы можете подумать, что я хвастаюсь Б, но когда вы прочитаете это, нажмите на часы, вы найдете
Я действительно хвастаюсь B
Тогда почему .22?
Как студент-естественник, соблюдение двух знаков после запятой является постоянным убеждением.
А внизу так же, как цифра 2, вот и все
регулярное выражение
Регулярные выражения, также известные как регулярные выражения. (английский: регулярное выражение, часто сокращенно regex, regexp или RE в коде), понятие в информатике. Регулярные выражения обычно используются для извлечения, замены и проверки текста, который соответствует шаблону (правилу).
Объект регулярного выражения
В яванском языке объект RegExp представляет собой регулярное выражение, которое является мощным инструментом для сопоставления строк с образцом.
Итак, как его использовать?
Два пути:литерал, конструктор
var reg = /\bhello\b/g //字面量
// \b代表单词边界(WordBoundary) 也就是说这个正则匹配的是 hello world这种hello 而不是helloworld
//因为helloworld连起来了,没有单词边界
var reg = new RegExp('\\bhello\\b','g')
//注意两者的区别
//后面这种方法需要转义反斜杠(javascript的原因),
//而且这个g(修饰符,全局匹配)是单独提取出来的
//而且正则两边没有/包围的,上面第一种是这样的=> /正则表达式/
Обычный визуализатор
Regulex
Визуализация графиков, очень полезная для понимания закономерностиБольшойтвоя помощь
Без дальнейших церемоний, сначала зайдите на этот сайт, в этой статье этот сайт будет использоваться для проверки письменных примеров.
метасимвол
Регулярные выражения состоят из двух основных классов символов.
- буквальные символы
- метасимвол
Литеральные символы — это символы, представляющие исходное значение.Как и привет в приведенном выше регулярном выражении, это означает, что строковый метасимвол, соответствующий приветствию, является символом, который не означает исходное значение, поэтому об этом намного проще думать. как выше \b
Поскольку метасимвол не представляет свой собственный символ, что, если я хочу сопоставить его исходный символ? Например, я хочу сопоставить знак +, знак *, тогда, пожалуйста, используйте \ для экранирования символов
Следующие метасимволы пропускаются первыми, и вы можете смотреть вниз, не запоминая их~
- $ соответствует концу входной строки. $ также соответствует 'n' или 'r', если установлено свойство Multiline объекта RegExp. Чтобы соответствовать самому символу $, используйте \$.
- () отмечает начало и конец подвыражения. Подвыражения могут быть получены для последующего использования. Чтобы сопоставить эти символы, используйте ( и ).
- * соответствует предыдущему подвыражению ноль или более раз. Чтобы соответствовать символу *, используйте *.
- + Соответствует предыдущему подвыражению один или несколько раз. Чтобы соответствовать символу +, используйте +.
- .соответствует любому одиночному символу, кроме символа новой строки n. Чтобы соответствовать . , используйте . .
- [] отмечает начало выражения в квадратных скобках. Чтобы сопоставить [ используйте [.
- {} отмечает начало выражения квалификатора. Чтобы сопоставить {, используйте {.
- | Указывает на выбор между двумя элементами. Чтобы соответствовать |, используйте |.
- • Соответствует предыдущему подвыражению ноль или один раз или указывает нежадный квалификатор. Чтобы соответствовать символу ?, используйте ?.
- \ Помечает следующий символ либо как специальный символ, либо как буквальный символ, либо как обратную ссылку, либо как восьмеричный escape-символ. Например, «n» соответствует символу «n». 'n' соответствует новой строке. Последовательность '\' соответствует "" и '(' соответствует "(".
- ^ соответствует началу входной строки, если только не используется в выражении в квадратных скобках, и в этом случае он указывает, что набор символов не принимается. Чтобы соответствовать самому символу ^, используйте ^.
- \cX соответствует управляющему символу, заданному x. Например, cM соответствует Control-M или возврату каретки. Значение x должно быть одним из A-Z или a-z. В противном случае обработайте c как буквальный символ 'c'.
- \f соответствует каналу формы. Эквивалентно x0c и cL.
- \n соответствует новой строке. Эквивалентно x0a и cJ.
- \r соответствует возврату каретки. Эквивалентно x0d и cM.
- \s соответствует любому пробельному символу, включая пробелы, табуляции, каналы форм и т. д. Эквивалентно [fnrtv]. Обратите внимание, что регулярные выражения Unicode будут соответствовать пробельным символам полной ширины.
- \S соответствует любому непробельному символу. Эквивалентно1.
- \t соответствует символу табуляции. Эквивалентно x09 и cI.
- \v соответствует вертикальной вкладке. Эквивалентно x0b и cK
граница
Примеры с самого начала мы знали это B, нет, это \ b
Он имеет в виду значение границ слов.
Мы знаем, что f*ck используется по-разному, может использоваться отдельно или может использоваться с несколькими частями речи.
Тогда мы просто хотим найти индивидуального х*я, посмотри на код.
//作为光荣的社会主义接班人怎么可能用f*ck做例子呢?
var reg = /\bis\b/g;
var str = "this is me";
str.replace(reg,'X')
//"this X me"
var reg = /is/g;
var str = "this is me";
str.replace(reg,'X')
//"thX X me"
Разница между ними хорошо видна, поэтому я не буду говорить больше, дамы и господа.
Давайте посмотрим на другой вопрос,Символ, если я только начинаю и средней части текста Символ, но нет, как?
Только так враг
var reg = /^A/g;
var str = "ABA";
str.replace(reg,'X');
//"XBA"
Закономерность, которая должна заканчиваться на A, следующая:
var reg = /A$/g;
var str = "ABA";
str.replace(reg,'X');
//"ABX"
Обратите внимание, что как положение начала и конца, так и положение ^ и $, ^ ставится перед регулярным выражением, а $ ставится после выражения
класс персонажей
При нормальных обстоятельствах символ в регулярном выражении соответствует символу в строке, например, выражение \bhello, что означает соответствие символу \b h e l l o,
Что, если мы хотим сопоставить класс символов?
Например, если я хочу сопоставить a, b или c, мы можем использовать метасимвол [] для создания простого класса.
[a,b,c] классифицирует a, b и c в одну категорию, указывая, что a, b или c могут быть сопоставлены.
Если вы немного знаете английский, вы должны быть в состоянии понять изображение ниже, одно из a, b, c, которое соответствует любому из abc~
класс диапазона
Когда мы узнали вышеизложенное, если мы хотим написать числа, которые соответствуют от 0 до 9, это должно быть написано так
Но что, если я хочу соответствовать большему количеству? Клавиатура не выбивается? Это правило слишком неразумно, не так ли? ? ?
Очевидно, что бы вы ни придумали, человек, который создал регулярное выражение, также думал об этом.
мы можем это сделать
Ладно, это немного проще, а то ты можешь снова удивиться, так что насчет моего рывка? Что делать, если я хочу сопоставить 0-9 и тире?
Не паникуйте, просто сделайте это позже
На этой картинке хорошо видно, что есть две ветки, а это значит, что я могу пойти по дороге 0-9 или по дороге коротких горизонтальных линий.
предопределенный класс
Изучив вышеизложенное, мы можем писать регулярные выражения, которые соответствуют числам, [0-9]
Так есть ли более простой и короткий путь?
По совпадению, просто правильно это мощный
В разделе метасимволов выше вы, возможно, заметили тонкости
Таблица выше, нет, картинка выше (куда этот segmentfault вставляет таблицу??)
Мы можем запомнить использование этих предопределенных классов в соответствии со значением английских слов.
Мы обнаружили, что разница между прописными и строчными буквами заключается в отрицании!, таких как d и D
В то же время мы можем найти из классов эквивалентности в таблице, что если мы хотим отрицания класса, то добавляем класс к классу^
none of abc
квантификатор
Что, если бы вы написали регулярное выражение, которое соответствует 10 числам? как бы ты написал
Эх~ вы, возможно, записали это с уверенностью
\d\d\d\d\d\d\d\d\d\d
Удивительно, но вы обнаружите, что, хотя ваша правая рука была одинокой более 20 лет, вы все еще чувствуете себя немного слабым!
усталость, иногда после переутомления
Чтобы спасти правую руку некоторых людей, у обычного есть квантификатор
Для выполнения вышеуказанных требований нам нужно всего лишь \d{10}
Digit 10times
Для облегчения некоторых людей с плохим английским, таких как я, я даже использовал малоизвестный перевод Baidu (расходы на рекламу являются частными для меня)
Но что, если я не знаю, сколько чисел нужно сопоставить? Во всяком случае, это совпадение чисел от 100 до 1000.
дан дан дан ~
Давайте посмотрим на результаты визуализатора для простоты понимания
Обратите внимание, что это {n,m} включает n раз и m раз, это закрытый интервал
Жадный режим и нежадный режим
Из приведенного выше мы знаем, что если мы хотим сопоставить от 100 до 1000 чисел, это записывается так:
\d{100,1000}
Что, если я даю строку с 1000 чисел, но хочу сопоставить только первые 100?
Если это написано как выше, то это выглядит следующим образом
var reg = /\d{3,6}/;
var str = "123456789";
str.replace(reg,'替换成这个');
//"替换成这个789"
Мы видим, что приведенный выше пример соответствует 6 числам и заменяет 6 чисел, хотя его обычное соответствие соответствует числам от 3 до 6.
Правильно, жадный! Он будет соответствовать как можно больше!
Это обычное жадное сопоставление, которое используется по умолчанию. Если мы не хотим быть такими жадными, как мы можем облегчить удовлетворение?
Просто добавьте ? после квантификатора
var reg = /\d{3,6}?/;
var str = "123456789";
str.replace(reg,'替换成这个');
//"替换成这个456789"
Хорошо видно, что обычный режим соответствует только первым 3 числам~ Это обычный нежадный режим.
условие перехода
Что, если мне нужно сопоставить только 100 или 1000 номеров?
Есть только две возможности, 100 и 1000, вместо любого числа от 100 до 1000. Как бороться с врагом?
Это необходимо для создания регулярного условия перехода.
\d{100}|\d{1000}
Следует отметить, что это | разделяет все части с левой и правой стороны, а не только левую и правую части символа, см. рисунок ниже
Иногда нам нужна только часть ветки, за которой следует тот же ствол, просто включите ветку с ()
Примечание: это сопоставление начинается с условия ветвления на левой стороне регулярки.Если левая сторона удовлетворена, то правая сторона не будет сравниваться!
var reg = /\d{4}|\d{2}/
var str = "12345"
str.replace(reg,'X');
// "X5"
var reg = /\d{2}|\d{4}/
var str = "12345"
str.replace(reg,'X');
//"X345"
вперед назад
иногда искомый символ может также зависеть от предшествующего и последующего символов для определения
Например, если я хочу заменить 2 последовательных числа, и им должны предшествовать 2 английские буквы, мне нужно заменить такие числа.
Вы спросите, а разве это не конец истории?
\d{2}\w{2}
Приведенное выше соответствует 2 числам и 2 буквам.Хотя они связаны, они соответствуют 4 символам.Если я хочу заменить совпадающий текст, то заменяются 4 символа, а мы хотим заменить только 2 числа. !
В это время вам нужно использовать утверждения
Сначала нам нужно понять несколько вещей
- Регулярные выражения начинают разбор от головы текста к хвосту, а направление хвоста текста называется 'front', то есть идти вперед, то есть идти к хвосту
- предвидениеТо есть, когда регулярное выражение соответствует правилу (в этом примере «2 числа»), посмотрите вперед, чтобы увидеть, соответствует ли оно утверждению (в этом примере «2 буквы впереди»), просмотр назад/просмотр назад Правила являются противоположными. (javascript не поддерживает просмотр вперед)
На форме!
Согласно содержимому таблицы, мы можем решить эту проблему.Обратите внимание, что \w включает цифры~ Требование к заголовку - соединить 2 буквы
var reg = /\d{2}(?=[a-zA-Z]{2})/;
var str = "1a23bc456def";
str.replace(reg,'X');
//"1aXbc456def"
Заменяются только цифры, а последующие утверждения не заменяются!
Кстати, давайте взглянем на этот негативный взгляд вперед.
Видеть этоnotза которым следует я думаю, вы должны знать об использовании
группировка
Когда мы хотим сопоставить слово, которое встречается три раза вместо числа, как мы его пишем?
вы могли бы написать
hello{3}
Затем вы открываете визуализатор
Блин, это всего лишь повторение моей буквы о! Мертвая мразь слишком много
На самом деле нам нужно использовать () только для достижения цели группировки, чтобы квантификатор действовал на группировку, а скобки в приведенных выше условиях ветвления также были одинаковыми
Как использовать групповой контент после группировки?
Сначала посмотрите на вопрос,Как сопоставить 8 не следующих друг за другом чисел?
Если вы не используете группировку, вы не сможете начать, потому что вы не сможете определить, есть ли дубликаты!
Сначала оглашаем ответ, а потом анализируем волну
- Во-первых, это (?! отрицательное опережающее утверждение А) выражение В, которое использует отрицательное опережающее утверждение, т. е. содержимое перед утверждением А (выражение В) не может соответствовать выражению А. Я могу не затыкай мне рот. Вы понимаете, конструкция такова, что мое утверждение "повторяющиеся числа", а затем выражение "8 чисел",«8 чисел» не могут быть составлены «появляются повторяющиеся числа»
- Затем это .*(\d).* Это поиск числа, которое появляется в любой позиции первым, почему оно находится в любой позиции? Поскольку повторение нашего суждения может появиться где угодно, глядя на визуализацию выше, становится ясно, что,До и после \d есть 0-n символов, поэтому говорят, что он находится в любой позиции..
- Самое главное, что представляет собой эта \1? Если вы внимательно посмотрите, то обнаружите, что \d имеет круглую скобку, что означает, чтогруппировка, тогда каково количество групп? Первая скобка — группа 1 (по умолчанию), если есть вторая скобка — группа 2,Упреждающие скобки не учитываются., и это \1 означает ссылку на эту группу 1, а \2 — на группу 2. Вам может быть интересно, эквивалентно ли мое цитирование написанию \d в этой позиции? НЕТ, не только так просто,Это относится к содержимому этого \d, что означает, что это будет то же значение, что и \d! Разве это не просто повторение? ! ! !это .*(\d).*\1 означаетЛюбое количество повторений в любом положении
- Наконец, то, что мы собрали, это,Сопоставьте 8 чисел без повторения. (?! Появляюсь каким-либо повторением) 8 цифр, потому что (?!) - отрицательный прочный, так. . . emmm. . Это понимание этого.
Есть и другие более подробные группировки контента, но место ограничено,Это почти 30 минут. Мне нужно было подобрать несколько ценных и часто используемых разговоров~
эй эй
Здесь представлена закономерность~
В следующей статье будут представлены свойства обычных объектов в javascript, а также некоторые методы.
Если у вас есть какие-либо комментарии или предложения, пожалуйста, укажите это в области комментариев, спасибо
- fnrtv ↩