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 . Регулярные выражения
   282   283   284   285   286   287   288   289   290   291   292