Текстові та повсякденні інструменти · Text Toolkit
З Клену до JavaScript: коротка історія формальних виразів
· Підземелля
Опубліковано ToolAcre · Редакція журналу
регулярні вираження Завантажити плагін обчислення-history

Сліди формальних виразів з 1950-х аутомата теорії через ред, греп і Перл до JavaScript Якщо ви хочете, щоб ви зрозуміли, чому синтаксис виглядає таким чином, що це робить, і які функції прибули.
Чужий маленька мова кожного півкуні — чому regex синтаксис відчуває древні і неспристойні
Регулярні вирази відчувають себе як мову, зібрана по стираннях, оскільки це істотно те, що вони є. Компактний сердечник чергування, повторення та групування виросло з математичного позначення в команди редактора, командно-лінійні фільтри та мовні функції. У кожному господарстві додано свої зручності, обмеження та термінологія.
Ця історія пояснює, чому патерн можна переглянути, але по-різному між грошима, Перл, Python і JavaScript. «Regex» – сімейне ім’я, не одна універсальна граматика. Для самостійного аналітика корисного уроку не запам’ятовується кожного діалекту, але визначити двигун, прапорці та правила заміни перед довірою запозиченого шаблону.
Регулярні події Клену — 1950-а математика скінченної автомати, яка дав нам зірку
Робота Стівена Колена Клена на скінченних автоматах та «регулярних заходах» подала теоретичний корінь протягом 1950-х років. Його позначення описані набори символічних послідовностей з використанням операцій, включаючи профспілку, конкатенацію та закриття. Операція закриття стала зіркою Клен: `A*` означає нульову або більше повторень, що намальовані з А, не просто «повтор один раз або більше».
Офіційні регулярні мови, які визначаються скінченними автоматами, є вузькими, ніж багато конструкцій, які зараз продаються під етикеткою regex. Заперечення, наприклад, можуть виявляти умови за межі класичної моделі. Сучасні двигуни, тому зберігають історичне ім’я та багато заперечень при здійсненні візерунків мов, можливості яких та стратегії виконання виходять за оригінальний математичний об’єкт Клену.
Thompson, ed і grep — як regex введений текст редагування в кінці 1960-х і початку 1970-х Unix інструменти
Ken Thompson з'єднав теорію для роботи текстових інструментів. І 1968 Комунікації ACM Папір, описаний у співвідношенні формальних виразів в машинному коді для пошуку тексту, а його раніше робота редактора допомогли розмістити шаблон, що відповідає всередині лінійки Unix. Про нас `ed` Редактор використовується регулярні вирази в командах, які вибрані та трансформовані відповідні рядки.
Назва `grep` прийшов з `ed` команда, як правило, rendered як `g/re/p`: глобально виберіть лінійки, що відповідають формальному виразу та їх друкуванню. Раннє горло не було сьогодні колекції GNU параметри, а потім основні і розширені POSIX форми відрізняються. Завершення змін було практичним: невелика символічна мова стала повсякденним інтерфейсом для пошуку тексту.
Перл і PCRE — розширення, які додали негредієнти, диваро та синтаксису більшість інструментів копіювання сьогодні
Перл зробив багату мову шаблону, центральну для загального програмування. Переміщення своїх версій, програмістів, які зіткнулися з групами захоплення, перевагами, затвердженнями, замінниками та модифікаторами шаблонів в одній високо видимій екосистемі. Перл 5 документозаписи конструкцій, таких як `*?` для мінімального узгодження та `(?=...)` для позитивного вигляду, поряд з багатьма особливостями, відсутніми від старих форм Unix.
Для того, щоб виграти цей стиль, ніж для того, щоб зберегти його насолоду. PCRE Призначені для користувача ідеї та відхилити інші двигуни. Поділитися з пунктуацією можна приховати різні семантики, поведінка Unicode або продуктивність. «Перл-подібний» послідовно описує широкий вплив, не гарантує, що перл є переносним.
Перл використовується більша практична мова шаблону; пізніше двигуни запозичили вибірково
JavaScript стандартизований власний `RegExp` об'єкти та синтаксису, такі як `/pattern/gi`Для програм, що працюють в браузерах та інших середовищах ECMAScript. Цей смак включає в себе захоплюючі та небайдужі групи, переваги, зовнішній вигляд, лінійні квантери та класи характеру. Пізніше видання додали іменовані групи захоплення і дивляться ES2018 специфікація.
JavaScript немає PCRE або Python з різними люксами. Наявність функції залежить від випуску ECMAScript, що здійснюється двигуном, а прапори є частиною поведінки, а не оформлення. MDNПрактичний посібник для синхронізації браузера, але навіть дійсний JavaScript Приклади можуть спиратися на прапори конкретного інтерфейсу не піддається.
JavaScript Набрали іменні групи і дивляться ES2018, але двигуни і прапори все ще відрізняються
Браузери кладуть JavaScript регулярно-виразковий двигун біля звичайної текстової роботи. Сторінка може компілювати шаблон, підрахувати матчі і пройти його до `String.prototype.replace` без відправки тексту на спеціальну послугу regex. Щоб отримати доступ до веб-переглядача, скористайтеся можливістю пошуку та заміни інтерфейсу веб-переглядача, хоча зовнішня сторінка все ще повинна бути перевірена окремо для вимог більшої конфіденційності.
ToolAcreКонтакти `new RegExp` У `compilePattern`, зловживає невдачі компіляції і повертає помилку замість кидання. `findReplace` кількість матчів перед застосуванням стандартної операції заміни. В результаті JavaScript замінні токени, такі як посилання захоплення, слідувати за рядком API; regex синтаксис і замінний синтаксис пов'язані з різними мовами.
Що це не кришка — формальна теорія мови за межами основ і двигунів
Ця коротка історія не доведе рівноваги між практичними двигунами та скінченними автоматами, алгоритмами виконання опитувань або рядом виконання за швидкістю. Відстеження, лінійно-часові методи та патологічні візерунки заслуговують окреме лікування. Про нас ToolAcre охоронець ловить помилки синтаксису, але не виявляє дійсного виразу, який виконує надмірне зворотне відстеження і встановлює основну нитку браузера.
Нор робить часовий ряд, що призначає кожного метахарактера до єдиного винахідника. Особливості програмного забезпечення часто прибули через папери, редактори, мовні релізи та сумісні репродукції, а не одну чисту ручку. Підтримуючи специфічні вертони, вони не оцінюють просте оповідання, що один продукт створив сучасний regex оптовий або який пізніше аромати успадкували ідентичну поведінку.
Вечеря — Режим regex Text Toolkit JavaScript смак, тому шаблони роботи з документацією браузера
Практичний спадок видно в ToolAcre: включити Regex і текст пошуку скомпільовано браузером JavaScript двигун. Залиште Regex вимкнено і метахарактери втечу, зробивши пошук літра. Хто слово обгортає вираз з ASCII- Стиль `` межі, при цьому контроль чутливості випадку `i` прапори, які завжди представляють глобальний `g` прапорець.
Ця остання деталь виправляє широку обіцянку, яка працює у форматі письмового перекладу. ToolAcre не піддається багатолінійності, точка-all, sticky або Unicode прапори, тому приклади, які вимагають `m`, `s`, `y`, `u` або `v` не можна відтворити. Використовуйте інструмент для тестування JavaScript візерунки, читати кількість заміни, і скасувати до завершення.