Выразительный JavaScript (Хавербеке) - страница 104


>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. Модули

Начинающий программист пишет программы так, как муравьи строят муравейник – по кусочку, без размышления над общей структурой. Его программы как песок. Они могут недолго простоять, но вырастая, они разваливаются.

Поняв проблему, программист тратит много времени на размышления о структуре. Его программы получаются жёстко структурированными, как каменные изваяния. Они тверды, но когда их нужно менять, над ними приходится совершать насилие.