Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задачи и упражнения по JavaScript. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Применение метода 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] – большие, [0­9] – цифру от 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]