Можно производить поиск символов из определённого набора. Например, можно игнорировать точки над ё при поиске, считая ‘е’ и ‘ё’ одинаковыми. Поэтому вместо ‘е’ будем задавать класс, который совпадёт и с ‘е’, и с ‘ё’. Для задания класса нужно перечислить все символы, с которыми может произойти совпадение, и заключить их в квадратные скобки.
Пример Js53
К примеру, код
var re = /пол[её]т/g;
var st = "полетели в полёт!"
alert(st.match(re));
выведет
Иногда все символы перечислять долго, и можно использовать так называемый диапазон, например,
Пример Js52
var re = /[0-9A-F]/g;
var st = "Шестнадцатеричная цифра C"
alert(st.match(re));
Здесь re эквивалентно заданию /[0123456789ABCDEF]/g.
Пример Js54
Заметим, что внутри класса набор специальных символов другой. Так, точка соответствует именно точке, и никакому другому символу. Зато ‘-‘ приобретает специальное значение. Чтоб задать в классе -, необходимо либо экранировать его, либо указать в начале или в конце класса, например,
var re = /[+-][0-9]/;
var st = "+3C"
alert(st.match(re));
Квадратные скобки являются метасимволами, и их при поиске надо экранировать.
Есть стандартные классы символов, которые задаются последовательностями из обратного слэша и литерального символа. Так, \d – это класс [0-9], \w = [\dA-Za-z_], \s – все пробельные символы, \D – все нецифровые символы, что можно выразить [^0-9] (заметьте, ^ здесь – отрицание класса символов, то есть класс совпадает со всеми символами не входящими в перечисленные), \W = [^\w], \S = [^\s]. Специальный метасимвол нулевой ширины \b совпадает с границей слова, то есть он совпадает с местом между \w и \W.
Пример Js55
К примеру,
var re = /\b[+-][\dA-F]\b/g;
var st = "+3C-D+12"
alert(st.match(re));
не совпадёт с +3, так как C принадлежит классу \w. Границы между классами, с которыми мог бы совпасть \b, выделены подчёркиванием: “+_3C_-_D_+_12”.