Семантика и использование объектов RegExp:
проверка совпадений строк, получение части содержимого строки и создание новой строки на основе исходной строки (включая добавление, удаление и изменение).
Существует два основных способа создания объекта RegExp:
использовать литерал, например /w/g.
Используйте конструктор, например new RegExp(/w/)
При создании объектов RegExp следует учитывать несколько моментов:
литерал часто используется для создания статических объектов RegExp, которые не генерируются во время выполнения.
Флаги можно добавлять непосредственно после литерала, чтобы ограничить результаты выполнения совпадающих строк. Часто используемые флаги включают g и i, которые используются для обозначения глобального соответствия (глобального) и соответствия без учета регистра (регистронезависимого) соответственно.
Первый параметр конструктора RegExp предоставляет шаблон объекта. Если шаблон является литералом RegExp, второй параметр (то есть указывающий флаг) не может быть предоставлен. Если шаблон представляет собой строку, вы можете использовать второй параметр
Конструктор RegExp часто используется для создания динамических объектов RegExp, созданных во время выполнения.
Если шаблон RegExp является строковым, все "" в литерале должны быть записаны как "\", поскольку "" необходимо экранировать в строке. Два вышеуказанных метода создают объект javascript, поэтому /w/ ==. /w/Return false
Функции, связанные с объектом RegExp:
Чтобы проверить соответствие строки, вы можете использовать метод regExp.test(string), который проверяет, соответствует ли строка шаблону, предоставленному regExp. Вы также можете использовать метод string.search(regExp), который вернет -1, если они не совпадают.
Чтобы получить часть строки, вы можете использовать метод regExp.exec(string) или метод string.match(regExp). Чтобы создать новую строку на основе исходной строки, обычно используйте string.replace(searchValue, метод replaceValue)
Семантика шаблона представлена в объекте RegExp:
RegExp может определять несколько альтернатив, разделенных знаком «|». Эта операция имеет самый низкий приоритет, поэтому, если существует «|», она сначала делит RegExp на несколько частей. Каждая альтернатива состоит из нескольких частей. Состоящие из частей, термины делятся на утверждение (используется для позиционной квалификации), атом (единица соответствия) и атом с квантором (модификатором).
Утверждение разделено на "^", который используется для соответствия началу строки. В multiInput (то есть, когда флаг содержит m), он также может соответствовать началу строки. конец строки. В multiInput (то есть, когда флаг содержит m), он также может соответствовать концу строки. «b» используется для соответствия интервалу w и W. любое содержимое строки, но используется только для определения соответствия позиции.
Ситуация с атомом более сложная. Давайте сначала посмотрим на квантификатор атома, который может включать * + ? {n} {m,} {m,n}, где * означает, что атом может иметь 0 или более повторений, + означает. 1 или более. Для приведенных выше повторений ? означает 0 или 1 раз, {n} означает ровно n повторений, {m,} означает m или более повторений, {m,n} означает, что количество повторений находится между m и n (включая m и n), за указанным выше квантификатором также может стоять знак ?, чтобы запустить нежадный режим. Значение этого режима я объясню позже.
Atom содержит шаблонCharacter (обычные символы, то есть символы без особой семантики в шаблоне, которые будут сопоставляться буквально)
"." соответствует всем символам, не являющимся символами конца строки.
AtomEscape содержит число 1 (используется для обозначения успешного совпадения в предыдущих скобках). Ссылки на некоторые символы n f r t v xNN uXXXX cX и т.д. Некоторые символы со специальным значением, например d D s S w W.
Класс символов содержит две формы: [...] и [^...]. Он может содержать множество символов, таких как -, n и другие ссылки на символы, b, d и другие символы специального значения. Обратите внимание: если вокруг «-» есть символы, семантика меняется от определенного символа к определенному символу. Если слева или справа от «-» нет символов, то «-» представляет собой только символ тире.
(группа), если вы выполняете группировку в указанном выше режиме, вы можете использовать Квантификатор, чтобы изменить его после группы.
(?:group), используется только как группа, и содержимое, соответствующее группе, не будет записано и не будет включено в 1..n
(?=группа), требует сопоставления, но не включает содержимое сопоставления группы в возвращаемую строку соответствия.
(?!group), не требует сопоставления и не будет включать содержимое сопоставления группы в возвращаемую строку сопоставления. Теперь я хочу поговорить о двух более важных режимах работы RegExp:
Альтернатива сопоставления всегда идет слева направо. первое совпадение больше не будет пытаться найти последующие совпадения, например
/ab|abc/.exec("abc"). Приведенная выше строка "abc" соответствует только ab по шаблону и не будет соответствовать abc.
Это всегда нормально. Если ? не добавлен после Quantifier, будет использоваться жадный режим. После добавления ? будет использоваться нежадный режим. Например, при
сопоставлении /w+bc/.exec("abcbcbc") будет использоваться w+. всегда сначала сопоставляйте как можно больше совпадений (т. е. жадный режим), поэтому будет соответствовать "abcbcbc". Если его изменить на
/w+?bc/.exec("abcbcbc"), то будет соответствовать как можно меньшему количеству совпадений ( то есть нежадный режим), поэтому он будет соответствовать только «abc».
Для общих требований синтаксического анализа обычно можно использовать метод exec или match. Если строка большая, вам часто необходимо использовать структуру цикла для анализа. RegExp очень эффективен в сочетании с while и другими операторами.
Когда вы хотите преобразовать существующую строку в другую, изменив ее, вы обычно всегда используете метод replace. На мой взгляд, этот метод является наиболее важным в RegExp. Его полиморфизм позволяет ему иметь множество форм. необходимость изменения строк.