English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Обзор
Конструктор RegExp создает объект регулярного выражения, который используется для совпадения с текстом.
Для получения информации о регулярных выражениях обратитесь к разделу о регулярных выражениях в руководстве JavaScript.
Грамматика
Текст и конструктивные символы возможны:
/pattern/flags new RegExp(pattern [, flags])
Параметры
pattern
Текст регулярного выражения
flags
Если указан, флаг может быть любым сочетанием следующих значений:
g
Глобальное совпадение
i
Игнорировать регистр
m
Многострочный режим; позволяет начальным и终结альным символам (^ и $) работать в многострочном режиме (например, ^ и $ могут совпадать с началом и концом каждой строки в строке, разделенной символами \n или \r, а не только с началом и концом всей входной строки).
u
Unicode. Паттерн рассматривается как последовательность Unicode кодовых точек (code points).
y
Вязкость; В целевой строке, совпадение начинается только с позиции, указанной свойством lastIndex регулярного выражения (и не пытается совпадать с любыми другими индексами).
描述
有两种方法可以创建一个正则对象:字面量和构造函数。要表示字符串,字面量形式不使用引号,而传递给构造函数的参数使用引号。下面表达式创建相同的正则表达式:
/ab+c/i; new RegExp('ab+c', 'i'); new RegExp(/ab+c/, 'i');
当表达式被赋值时,字面量形式提供正则表达式的编译(compilation)状态,当正则表达式保持为常量时使用字面量。例如当你在循环中使用字面量构造一个正则表达式时,正则表达式不会在每一次迭代中都被重新编译(recompiled)。
而正则表达式对象的构造函数,如 new RegExp('ab+c') 提供了正则表达式运行时编译(runtime compilation)。如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。
从ECMAScript 6开始,当第一个参数为正则表达式而第二个标志参数存在时,new RegExp(/ab+c/, 'i')不再抛出TypeError (“当从其他正则表达式进行构造时不支持标志”)的异常,取而代之,将使用这些参数创建一个新的正则表达式。
当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:
var re = new RegExp("\\w+"); var re = /\w+/;
以字面量定义正则表达式
var expression = /pattern/ flags;
pattern 部分可以是任何简单或复杂的正则表达示
flage 标明正则表达式的行为 1.g:全局模式,不会在发现第一个匹配项后停止 2.i:不区分大小写模式 3.m:多行模式
Пример:
var pattern1 = /at/g; //匹配字符串中所有at var pattern2 = /[bc]at/i; //匹配第一个“bat”或“cat”,不区分大小写 var pattern3 = /.at/gi; //全局匹配以.at“结尾”的三个字符。不区分小写
模式中使用的所有元字符都必须转义。正则表达式中的元字符包括:([{\^$|?*+.}])
Пример:
var pattern4 = /\[bc\]at/i; //匹配第一个“[bc]at”,不区分大小写
Использование конструктора RegExp, принимает 2 параметра, параметр 1: строка шаблона для соответствия, параметр 2: опциональные флаги поведения
Пример:
var pattern5 = new RegExp("[bc]at", "i");
Примечание: Поскольку параметр шаблона конструктора RegExp является строкой, в некоторых случаях необходимо выполнять двойную экранизацию строки. Все символы метки должны быть двойными.
Пример:
Лiteral Equivalent string
/\[bc\]at/ "\\[bc\\]at"
/\.at/ "\\.at"
/name/\age/ "name\\/age"
/\d.\d{1,2}/ "\\d.\\d{1,2}"
/\w\\hello\\123/ "\\w\\\\hello\\\\123"
Примечание: Создание регулярного выражения с помощью литерала и инстанцирования不一样, литерал всегда будет делиться одним и тем же экземпляром RegExp (ECMAScript3). Каждый новый экземпляр RegExp, созданный с помощью конструктора, является новым экземпляром.
Свойства экземпляра RegExp
console.log(pattern5.global); //false Установлен ли флаг g console.log(pattern5.ignoreCase); //true Установлен ли флаг i console.log(pattern5.multiline); //false Установлен ли флаг m console.log(pattern5.lastIndex); //0 Начальная позиция для поиска следующего совпадения console.log(pattern5.source); //[bc]at String representation of regular expression
Наследуемые свойства
console.log(pattern5.toString()); // /[bc]at/i Лiteral representation of regular expression console.log(pattern5.toLocaleString()); // /[bc]at/i Лiteral representation of regular expression console.log(pattern5.valueOf()); // /[bc]at/i Лiteral representation of regular expression
Методы экземпляра RegExp
Метод один: exec(), принимает один параметр, это строка шаблона. Возвращает массив с информацией о первом совпадении, в случае отсутствия совпадений возвращает null, массив实例 содержит два свойства index (позиция совпадения в строке) и input (строка, на которую применен регулярный выражение).
var text = "huang jin liang shi ge hao ren"; var pattern6 = new RegExp("huang( jin liAng( shi ge hao ren)?)?", "i"); var matches = pattern6.exec(text); console.log(matches); //[ 'huang jin liang shi ge hao ren', // ' jin liang shi ge hao ren', // ' shi ge hao ren', // индекс: 0, // ввод: 'huang jin liang shi ge hao ren' ] var text1 = "cat, bat, sat"; var pattern7 = new RegExp(".at") var matches1 = pattern7.exec(text1); console.log(matches1); //cat var pattern8 = new RegExp(".at", "gm"); var matches2 = pattern8.exec(text1); console.log(matches2); //cat var matches3 = pattern8.exec(text1); console.log(matches3); //bat var matches4 = pattern8.exec(text1); console.log(matches4); //sat var matches5 = pattern8.exec(text1); console.log(matches5); //null
Метод второй: test(), принимает один параметр, это строка шаблона. Возвращает true, если шаблон соответствует параметру,否则 false
var text2 = "000-00-0000"; var pattern9 = new RegExp("\\d{3}-\\d{2}-\\d{4}"); console.log(pattern9.test(text2)) console.log(text2); if (pattern9.test(text2)) { console.log("Найдено совпадение"); } console.log("Не удалось найти совпадение"); }
Свойства конструктора (некоторыми браузерами не поддерживается)
Длинные имена свойств Короткие имена свойств Объяснение
input $_ последнее вхождение строки, которое нужно соответствует
lastMatch $& последнее соответствие
lastParen $+ последняя захватывающая группа
leftContext $` текст, находящийся до lastMatch в input字符串е
multiline $* логический, является ли это многострочным режимом
rightContext $' текст, находящийся после lastMatch в input字符串е
$1~$9 используются для хранения нескольких захватывающих групп
В ограничениях ECMAScript
1. Присоединение и завершение строки с помощью ана и з
2. Возвратный поиск
3. Типы объединения и пересечения
4. Атомарные группы
5. Поддержка Unicode (за исключением единичных символов)
6. Именованные группы захвата
7. С и x соответствие шаблону
8. Условное соответствие
9. Комментарии в регулярных выражениях
Н newly found method for matching multiline in js
<script> var s = "Please yes\nсделайте мой день лучше!"; alert(s.match(/yes.*day/)); // Возвращает null alert(s.match(/yes[^]*day/)); // Возвращает 'yes\nсделайте мой день лучше' </script>
К сожалению, editplus не работает, часто удобнее использовать dw.