Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Задачи и упражнения по JavaScript. Учебное пособие
.pdf
Применение метода replace () класса String приводит к следующему результату:
alert( 'aab'.replace(/a/, '!') ); // !ab
alert( 'aab'.replace(/a/g, '!') ); // !!b
i – осуществляет поиск без учета регистра символов
Применение метода replace() класса String приводит к следующему результату:
alert( 'Aab'.replace(/a/, '!') ); // A!b
alert( 'Aаb'.replace(/a/i, '!') ); // !аb
alert( 'Aаb'.replace(/a/gi,'!') ); // !!b
m – позволяет найти подстроки, которые соответ-
ствуют регулярному выражению, в многострочном тексте. В
регулярном выражении можно указывать несколько модификаторов, их порядок значения не имеет.
Специальные символы
В регулярных выражениях есть два типа символов: те,
которые обозначают сами себя (это буквы, цифры и символы
@ : , ' '' ; - _ = < > % # ~ `& ! / ) и специальные символы
($ ^ . * + ? \ {} [] () |).
Значение специальных символов
Точка(.) обозначает один любой символ:
'xax x&x x-x xaax'.replace(/x.x/g, '!'); // ! ! ! xaax
Первые три подстроки попали под шаблон ('x', любой
символ, 'x') и заменились на '!',
'xax xabx'.replace(/x..x/, '!'); // xax !
Здесь такой шаблон : буква 'x', затем два любых символа, затем опять буква 'x'.
Плюс (+) обозначает повторение предыдущего сим-
вола один и более раз:
'xx xax xaax xaaax xbx'.replace(/xa+x/g, '!'); // xx ! ! ! xbx
В данном случае шаблон поиска выглядит так: буква 'x',
буква 'a' один или более раз, буква 'x'.
71

Звездочка (*) обозначает повторение предыдущего
символа ноль и более раз:
'xx xax xaax xaaax xbx'.replace(/xa*x/g, '!'); // ! ! ! ! xbx
В данном случае шаблон поиска выглядит так: буква 'x',
буква 'a' ноль или более раз, буква 'x'.
Вопрос (?) обозначает повторение предыдущего сим-
вола ноль или один раз, иначе говоря – символ может быть, а
может и не быть:
'xx xax xaax xbx'.replace(/xa?x/g, '!'); // ! ! xaax xbx
В данном случае шаблон поиска выглядит так: буква 'x',
далее буква 'a' может быть или не быть, потом буква 'x'.
Круглые скобки ( ) позволяют распространить дей-
ствие последующих специальных символов на группу символов, заключенных в скобки:
'xabx xababx xaabbx'.replace(/x(ab)+x/g, '!'); // ! ! xaabbx
В данном случае шаблон поиска выглядит так: буква 'x',
далее строка 'ab' один или более раз, потом буква 'x'.
Обратный слеш (\) перед спецсимволом обращает его в
обычный:
alert( 'a+x ax aax aaax'.replace(/a\+x/g, '!')); // ! ax aax aaax
Шаблон поиска выглядит так: буква 'a', затем плюс '+',
затем буква 'x'.
'a.x abx azx'.replace(/a\.x/g, '!'); // ! abx azx
В данном примере шаблон выглядит так: буква 'a', затем
точка '.', затем буква 'x':
Фигурные скобки {} обозначают повторение предыду-
щей комбинации символов число раз, указанное внутри них.
Например:
{5} – пять повторений, {2,5} – повторяется от двух до пяти
(оба включительно), {2,} – повторяется два и более раз.
'xx xax xaax xaaax'.replace(/xa{1,2}x/g, '!'); // xx ! ! xaaax
В данном случае шаблон поиска выглядит так: буква 'x',
буква 'a' один или два раза, буква 'x'.
'xx xax xaax xaaax'.replace(/xa{0,2}x/g, '!'); // ! ! ! xaaax
72

В данном случае шаблон поиска выглядит так: буква 'x',
буква 'a' ноль, один или два раза, буква 'x';
Квадратные скобки [ ] представляют собой опера-
цию 'или'для символов, записанных внутри них. Группы символов задаются через дефис между первым и последним символами диапазона. Например:
[a-z] задаст маленькие латинские буквы, [A-Z] – большие, [09] – цифру от 0 до 9.
'axx bxx cxx exx'.replace(/[abc]xx/g, '!'); //! ! ! exx
В данном примере шаблон поиска выглядит так: первый
символ – это буква 'a', 'b' или 'c', потом две буквы 'x'.
Квадратные скобки [ ] имеют свои спецсимволы –
это '^' и '-', кроме того, квадратным скобкам как символам
внутри [ ] предшествует обратный слеш.
‒ В квадратных скобках перед перечислением символов
знак крышка (^) означает, что идет поиск строки, в которой
нет перечисленных символов:
'axx bxx ^xx dxx'.replace(/[^d]xx/g, '!'); //! ! ! dxx
Шаблон поиска такой: первый символ – это все кроме 'd',
потом две буквы 'x':
'axx bxx ^xx dxx'.replace(/[\^d]xx/g, '!'); //axx bxx ! !
Шаблон поиска такой: первый символ – это 'd' или '^', потом
две буквы 'x'.
‒ Дефис – тоже спецсимвол внутри [ ] . Если сам дефис
нужен как символ, то его ставят там, где он не будет воспринят как разделитель группы.
'axx Axx -xx @xx'.replace(/[a-zA-Z-]xx/g, '!'); //! ! ! @xx
Шаблон поиска такой: первый символ – это маленькие,
большие буквы или дефис '–', потом две буквы 'x'.
Все остальные спецсимволы внутри [ ] становятся обычными символами, следовательно, перед ними не надо ставить
обратный слеш.
73

Методы класса RegExp
test(строка) возвращает true, если в строке существует
последовательность символов, соответствующая регулярному
выражению, а иначе – false:
var str = "hello world!";
var exp = /hello/;
var res = exp.test(str);
document.write(res); // truе
Если str определить следующим образом:
var str = "Hi, world!";
то функция test() вернет значение false.
exec(строка)работает аналогично предыдущему
методу, но данный метод возвращает ту часть строки,
которая соответствует регулярному выражению. Если
соответствий нет, то возвращается значение null:
var str = "hello world!";
var exp = /hello/;
var res = exp.test(str);
document.write(res); // hello
Упражнения
Задание 1
Дана строка 'ahb acb aeb aeeb adcb axeb'. Написать регулярное выражение, которое найдет строки ahb, acb, aeb по
шаблону: буква 'a', любой символ, буква 'b'.
Задание 2
Дана строка 'aba aca aea abba adca abea'. Написать регулярное выражение, которое найдет строки abba adca abea по
шаблону: буква 'a', 2 любых символа, буква 'a'.
Задание 3
Дана строка 'aba aca aea abba adca abea'. Написать регулярное выражение, которое найдет строки abba и abea.
74

Задание 4
Дана строка 'aa aba abba abbba abca abea'. Написать регулярное выражение, которое найдет строки aba, abba, abbba по
шаблону: буква 'a', буква 'b' любое количество раз, буква 'a'.
Задание 5
Дана строка 'aa aba abba abbba abca abea'. Написать регулярное выражение, которое найдет строки aa, aba, abba, abbba
по шаблону: буква 'a', буква 'b' любое количество раз (в том
числе ни одного раза), буква 'a'.
Задание 6
Дана строка 'aa aba abba abbba abca abea'. Написать регулярное выражение, которое найдет строки aa, aba по шаблону:
буква 'a', буква 'b' один раз или ни одного, буква 'a'.
Задание 7
Дана строка 'aa aba abba abbba abca abea'. Написать регулярное выражение, которое найдет строки aa, aba, abba, abbba.
Задание 8
Дана строка 'ab abab abab abababab abea'. Написать регулярное выражение, которое найдет строки по шаблону: строка
'ab' повторяется 1 или более раз.
Задание 9
Дана строка 'a.a aba aea'. Написать регулярное выражение, которое найдет строку a.a, не захватив остальные.
Задание 10
Дана строка '2+3 223 2223'. Написать регулярное выражение, которое найдет строку 2+3, не захватив остальные.
Задание 11
Дана строка '23 2+3 2++3 2+++3 345 567'. Написать регулярное выражение, которое найдет строки 2+3, 2++3, 2+++3,
не захватив остальные (+ может быть любое количество).
75

Задание 12
Дана строка '23 2+3 2++3 2+++3 445 677'. Написать регулярное выражение, которое найдет строки 23, 2+3, 2++3,
2+++3, не захватив остальные.
Задание 13
Дана строка '*+ *q+ *qq+ *qqq+ *qqq qqq+'. Написать
регулярное выражение, которое найдет строки *q+, *qq+,
*qqq+, не захватив остальные.
Задание 14
Дана строка 'aa aba abba abbba abbbba abbbbba'. Написать
регулярное выражение, которое найдет строки abba, abbba,
abbbba и только их.
Задание 15
Дана строка 'aa aba abba abbba abbbba abbbbba'. Написать
регулярное выражение, которое найдет строки вида aba, в которых 'b' встречается не более 3 раз.
Задание 16
Дана строка 'aa aba abba abbba abbbba abbbbba'. Написать
регулярное выражение, которое найдет строки вида aba, в которых 'b' встречается не менее 4 раз.
Задание 17
Дана строка 'aba aea aca aza axa'. Написать регулярное
выражение, которое найдет строки aba, aea, axa, не затронув
остальных.
Задание 18
Дана строка 'aba aea aca aza axa a.a a+a a*a'. Написать регулярное выражение, которое найдет строки aba, a.a, a+a,
a*a, не затронув остальных.
76

Задание 19
Написать регулярное выражение, которое найдет строки
следующего вида: по краям стоят буквы 'a', а между ними –
цифра от 3 до 7.
Задание 20
Написать регулярное выражение, которое найдет строки
следующего вида: по краям стоят буквы 'a', а между ними любые – цифра от 3 до 7 любых цифр.
Задание 21
Написать регулярное выражение, которое найдет строки
следующего вида: по краям стоят буквы 'a', а между ними –
буква от a до g.
Задание 22
Написать регулярное выражение, которое найдет строки
следующего вида: по краям стоят буквы 'a', а между ними –
буква от a до f и от j до z.
Задание 23
Написать регулярное выражение, которое найдет строки
следующего вида: по краям стоят буквы 'a', а между ними –
буква от a до f и от A до Z.
Задание 24
Дана строка 'aba aea aca aza axa a-a a#a'. Написать регулярное выражение, которое найдет строки следующего вида:
по краям стоят буквы 'a', а между ними – не 'e' и не 'x'.
Задание 25
Дана строка 'wйw wяw wёw wqw'. Написать регулярное
выражение, которое найдет строки следующего вида: по
краям стоят буквы 'w', а между ними – буква кириллицы.
77

2.8. Объект
Объект – это единственный составной тип данных в
JavaScript. Примитивные типы данных: числовой, строковый,
логический, рассматривались в предыдущих главах.
В JavaScript существует несколько видов объектов:
встроенные объекты;
объекты браузера;
объекты, которые программист создает самостоя-
тельно (пользовательские).
Встроенные объекты – это объекты классов Number, String,
Array…
В этой части работы речь пойдет о пользовательских
объектах. Объект представляет собой неупорядоченный
набор пар вида «ключ-значение». Каждая такая пара может
хранить свойства объекта, которые описывают его состояние
или поведение. Ключи должны иметь уникальные имена. Значение состояния может быть любым: как значением простого
типа, так и другим объектом. Поведение описывается функциями.
Создание нового объекта
Есть несколько способов создания нового объекта.
Первый способ создания использует фигурные скобки:
var user = {};
Второй способ заключается в использовании конструк-
тора Object:
var user = new Object();
Создав объект, для добавления к нему свойств после его
имени через точку необходимо указать имя свойства и присвоить ему значение:
user.name = "Вася";
user.age = 26;
Методы объекта определяют его поведение или дей-
ствия, которые он производит. Так как методы представляют
78

собой функции, то они добавляются к объекту следующим образом:
user.display = function(){
alert(user.name);
alert (user.age);
};
Этот метод выводит имя и возраст объекта user.
Упрощенный синтаксис создания объектов
Вместо отдельного определения всех свойств можно
определить их разом при создании объекта, и делается это следующим образом:
var user = {
name: "Вася",
age: 26,
display: function(){
alert(this.name);
alert (this.age);
};
// вызов метода
user.display();
Следует заметить, что при таком способе определения
объекта в качестве символа присваивания используется двоеточие, а после определения отдельных свойств ставится запятая. Чтобы обратиться к свойствам объекта внутри этого же
объекта, используется ключевое слово this. Оно означает
ссылку на текущий объект.
Синтаксис массивов
Существует также альтернативный способ определения
свойств объектов с помощью синтаксиса массивов:
var user = {};
user["name"] = "Вася";
user["age"] = 26;
79

user["display"] = function(){
alert (user.name);
alert (user.age);};
// вызов метода
user["display"]();
В данном случае при обращении к свойствам можно ис-
пользовать либо точку (user.name), либо обращаться как к элементу массива (user["name"]).
Удаление свойств
Выше было показано, как можно динамически добав-
лять новые свойства к объекту. Однако также можно и удалять
свойства с помощью оператора delete:
delete user.name;
После удаления свойство будет не определено, поэтому
при попытке обращения к нему программа вернет значение
undefined. Здесь не идет речь о классах. Просто – в любой объект в любое время можно добавить новое свойство или удалить существующее.
Перебор всех свойств объекта
Для перебора всех свойств объекта используется специ-
альный вид оператора цикла for..in:
for (var key in user ) {
alert(key+':'+user[key]);}
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
