Марейн Хавербеке - Выразительный JavaScript
- Название:Выразительный JavaScript
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:978-1593275846
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Марейн Хавербеке - Выразительный JavaScript краткое содержание
В процессе чтения вы познакомитесь с основами программирования и, в частности, языка JavaScript, а также выполните несколько небольших проектов. Один из самых интересных проектов — создание своего языка программирования.
Выразительный JavaScript - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
По странному стечению обстоятельств, исторически \s
(пробел) совпадает со всеми символами, которые в Unicode считаются пробельными, включая такие штуки, как неразрывный пробел или монгольский разделитель гласных.
У некоторых реализаций регулярок в других языках есть особый синтаксис для поиска специальных категорий символов Unicode, типа «все прописные буквы», «все знаки препинания» или «управляющие символы». Есть планы по добавлению таких категорий и в JavaScript, но они, видимо, будут реализованы нескоро.
Итог
Регулярки – это объекты, представляющие шаблоны поиска в строках. Они используют свой синтаксис для выражения этих шаблонов.
/abc/
Последовательность символов
/[abc]/
Любой символ из списка
/[^abc]/
Любой символ, кроме символов из списка
/[0-9]/
Любой символ из промежутка
/x+/
Одно или более вхождений шаблона x
/x+?/
Одно или более вхождений, нежадное
/x*/
Ноль или более вхождений
/x?/
Ноль или одно вхождение
/x{2,4}/
От двух до четырёх вхождений
/(abc)/
Группа
/a|b|c/
Любой из нескольких шаблонов
/\d/
Любая цифра
/\w/
Любой алфавитно-цифровой символ («буква»)
/\s/
Любой пробельный символ
/./
Любой символ, кроме переводов строки
/\b/
Граница слова
/^/
Начало строки
/$/
Конец строки
У регулярки есть метод test
, для проверки того, есть ли шаблон в строке. Есть метод exec
, возвращающий массив, содержащий все найденные группы. У массива есть свойство index
, показывающее, где начался поиск.
У строк есть метод match
для поиска шаблонов, и метод search
, возвращающий только начальную позицию вхождения. Метод replace
может заменять вхождения шаблона на другую строку. Кроме этого, вы можете передать в replace
функцию, которая будет строить строчку на замену, основываясь на шаблоне и найденных группах.
У регулярок есть настройки, которые пишут после закрывающего слэша. Опция i
делает регулярку регистронезависимой, а опция g
делает её глобальной, что, кроме прочего, заставляет метод replace
заменять все найденные вхождения, а не только первое.
Конструктор RegExp
можно использовать для создания регулярок из строк.
Регулярки – острый инструмент с неудобной ручкой. Они сильно упрощают одни задачи, и могут стать неуправляемыми при решении других, сложных задач. Часть умения пользоваться регулярками состоит в том, чтобы уметь сопротивляться искушению запихнуть в них задачу, для которой они не предназначены.
Упражнения
Неизбежно при решении задач у вас возникнут непонятные случаи, и вы можете иногда отчаиваться, видя непредсказуемое поведение некоторых регулярок. Иногда помогает изучить поведение регулярки через онлайн-сервис типа debuggex.com, где можно посмотреть её визуализацию и сравнить с желаемым эффектом.
Регулярный гольф
«Гольфом» в коде называют игру, где нужно выразить заданную программу минимальным количеством символов. Регулярный гольф – практическое упражнение по написанию наименьших возможных регулярок для поиска заданного шаблона, и только его.
Для каждой из подстрочек напишите регулярку для проверки их нахождения в строке. Регулярка должна находить только эти указанные подстроки. Не волнуйтесь насчёт границ слов, если это не упомянуто особо. Когда у вас получится работающая регулярка, попробуйте её уменьшить.
1 car и cat
2 pop и prop
3 ferret, ferry, и ferrari
4 Любое слово, заканчивающееся на ious
5 Пробел, за которым идёт точка, запятая, двоеточие или точка с запятой.
6 Слово длиннее шести букв
7 Слово без букв e
// Впишите свои регулярки
verify(/.../,
["my car", "bad cats"],
["camper", "high art"]);
verify(/.../,
["pop culture", "mad props"],
["plop"]);
verify(/.../,
["ferret", "ferry", "ferrari"],
["ferrum", "transfer A"]);
verify(/.../,
["how delicious", "spacious room"],
["ruinous", "consciousness"]);
verify(/.../,
["bad punctuation ."],
["escape the dot"]);
verify(/.../,
["hottentottententen"],
["no", "hotten totten tenten"]);
verify(/.../,
["red platypus", "wobbling nest"],
["earth bed", "learning ape"]);
function verify(regexp, yes, no) {
// Ignore unfinished exercises
if (regexp.source == "...") return;
yes.forEach(function(s) {
if (!regexp.test(s))
console.log("Не нашлось '" + s + "'");
});
no.forEach(function(s) {
if (regexp.test(s))
console.log("Неожиданное вхождение '" + s + "'");
});
}
Кавычки в тексте
Допустим, вы написали рассказ, и везде для обозначения диалогов использовали одинарные кавычки. Теперь вы хотите заменить кавычки диалогов на двойные, и оставить одинарные в сокращениях слов типа aren’t.
Придумайте шаблон, различающий два этих использования кавычек, и напишите вызов метода replace
, который производит замену.
Снова числа
Последовательности цифр можно найти простой регуляркой /\d+/
.
Напишите выражение, находящее только числа, записанные в стиле JavaScript. Оно должно поддерживать возможный минус или плюс перед числом, десятичную точку, и экспоненциальную запись 5e-3
или 1E10
– опять-таки с возможными плюсом или минусом. Также заметьте, что до или после точки не обязательно могут стоять цифры, но при этом число не может состоять из одной точки. То есть, .5
или 5
. – допустимые числа, а одна точка сама по себе – нет.
// Впишите сюда регулярку.
var number = /^...$/;
// Tests:
["1", "-1", "+15", "1.55", ".5", "5.", "1.3e2", "1E-4",
"1e+12"].forEach(function(s) {
if (!number.test(s))
console.log("Не нашла '" + s + "'");
});
["1a", "+-1", "1.2.3", "1+1", "1e4.5", ".5.", "1f5",
"."].forEach(function(s) {
if (number.test(s))
console.log("Неправильно принято '" + s + "'");
});
10. Модули
Начинающий программист пишет программы так, как муравьи строят муравейник – по кусочку, без размышления над общей структурой. Его программы как песок. Они могут недолго простоять, но вырастая, они разваливаются.
Поняв проблему, программист тратит много времени на размышления о структуре. Его программы получаются жёстко структурированными, как каменные изваяния. Они тверды, но когда их нужно менять, над ними приходится совершать насилие.
Мастер-программист знает, когда нужна структура, а когда нужно оставить вещи в простом виде. Его программы словно глина – твёрдые, но податливые.
Мастер Юан-Ма, «Книга программирования»У каждой программы есть структура. В частностях она определяется тем, как программист делит код на функции и блоки внутри этих функций. Программисты вольны в создании структуры своей программы. Структура определяется больше вкусом программиста, нежели функциональностью программы.
Читать дальшеИнтервал:
Закладка: