Page 287 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 287
const inputs = [
" j o hn@doe . c oт" , / / ТОЛЬКО адрес
" j ohn@doe . c oт is ту eтail " , 11 адрес вначале
"ту eтail i s j o hn@doe . c oт" , 11 адрес в конце
"use j o hn@doe . coт, ту eт i l " , 11 адрес в середине с запятой после
a
т
"ту eтail : j ohn@doe . c o . " , ! / адрес окружен пунктуацией
] ;
Учесть следует много, но все эти адреса электронной почты существуют в грани
цах слова. Еще одно преимущество маркеров границ слов в том, что, поскольку они
не перерабатывают входные данные, мы не должны заботиться об их "откладыва
нии" в строке замены.
const eтailMatcher =
/ \ Ь [ а - z ] [a-z0-9 . _ - ] * @ [ a - z ] [a-z0-9_ ] + \ . [ a - z ] + ( ? : \ . [a-z ] + ) ? \ Ь/ig;
-
r
$
inputs . тар ( s => s . replace ( eтailMatche , ' < а hre f="тail to : & " > $ & </а> ' ) ) ;
/ / возвращает [
/ / "<а href="тa ilto: john@doe . coт">john@doe. сот</ а>",
/ / "<а href="тailto: john@doe. coт">john@doe. сот</ а> is ту email ",
a
>
/ / "ту eтail i s <а href="т i l t o : j o hn@doe. coт ">john@doe. coт</a " ,
a
a
/ / "use <а href="т i l t o : j o hn@doe . coт ">john@doe . coт</a>, ту eт i l " ,
a
a
a
/ / "ту eт i l : < a href="т i l t o : j o hn@doe. com>john@doe. coт</ > . " ,
11 }
Кроме маркеров границ слов, в этом регулярном выражении используется мно
го средств, которые мы рассматривали в данной главе. На первый взгляд, оно ка
жется просто обескураживающим, выполнив его анализ, можно сделать хороший
шаг на пути к мастерству овладения регулярными выражениями (обратите особое
внимание на то, что макрос замены, $ &, не включает символы, окружающие адрес
электронной почты ... поскольку они не были переработаны).
Границы слов также удобны тогда, когда вы пытаетесь искать текст, который
начинается с или заканчивается с определенного слова или содержит другое сло
во. Например, / \ bcount/ найдет слова count и countdown, но не discount, recount
и accountaЬle; / \ bcount \ B / найдет только countdown; / \ Bcount\Ы найдет discount и
recount, а / \Bcount \В/ найдет только ассоипtаЫе.
Уп р е жден и я
Если использование жадного и ленивого распознавания отделяют дилетантов
от профессионалов, то упреждения (lookahead) отделяют профессионалов от гуру.
Упреждения (подобно якорям и метасимволам границ слова) не перерабатывают
входные данные. Однако в отличие от якорей и границ слова, они универсальны:
вы можете распознать любое подвыражение, не перерабатывая его. Как и с метасим
волами границы слова, тот факт, что упреждения не распознаются (match), может
предохранить вас от необходимости "откладывать" нечто при выполнении замены.
290 Глава 1 7 . Регулярные выражения

