- Визначення класу WikiParser
- Перетворення зразків напівжирного і курсивного шрифтів
- Перетворення зразків маркера абзацу
- Перетворення зразків Wiki абзацу
- Перетворення URL-адрес в теги <a> HTML
- Перетворення рядків символу долара США в рядки символу євро
Простий приклад перетворення тексту Wiki показує ряд випадків застосування регулярних виразів.
Перетворення рядків тексту, при якому відбувається збіг вихідного зразка Wiki з певними вивідними рядками HTML.
Використання регулярного виразу з метою перетворення зразків URL в теги гіперпосилань <a> HTML.
Використання регулярного виразу з метою перетворення рядків символу долара США (таких як "$ 9.95") в рядки символу євро (такі як "8.24 €").
Отримати файли програми для цього прикладу можна на сторінці www.adobe.com/go/learn_programmingAS3samples_flash_ru . Файли зі зразками застосування WikiEditor можна знайти в папці Samples / WikiEditor. Додаток складається з наступних файлів.
File
опис
WikiEditor.mxml
або
WikiEditor.fla
Основний файл програми Flash (FLA) або Flex (MXML).
com / example / programmingas3 / regExpExamples / WikiParser.as
Клас, що включає методи, які використовують регулярні вирази для перетворення зразків тексту, що вводиться Wiki в еквівалентний вивідний текст HTML.
com / example / programmingas3 / regExpExamples / URLParser.as
Клас, що включає методи, які використовують регулярні вирази для перетворення рядків URL в теги гіперпосилань <a> HTML.
com / example / programmingas3 / regExpExamples / CurrencyConverter.as
Клас, що включає методи, які використовують регулярні вирази для перетворення рядків символу долара США в рядки євро.
Визначення класу WikiParser
Клас WikiParser включає методи, які перетворять вводиться текст Wiki в еквівалентний вивідний текст HTML. Цей випадок застосування перетворення не є достатньо стійким до збоїв, але, тим не менш, він ілюструє деякі хороші приклади використання регулярних виразів для збігу зразків і перетворення рядків.
Функція конструктора разом з методом setWikiData () просто ініціалізує рядок прикладу тексту, що вводиться Wiki наступним чином:
public function WikiParser () {wikiData = setWikiData (); }
Коли користувач натискає в демонстраційному додатку кнопку «Перевірка», додаток запускає метод parseWikiString () об'єкта WikiParser. Цей метод викликає ряд інших методів, які, в свою чергу, компонують отримані на виведенні рядка HTML.
public function parseWikiString (wikiString: String): String {var result: String = parseBold (wikiString); result = parseItalic (result); result = linesToParagraphs (result); result = parseBullets (result); return result; }
Кожен з цих викликаних методів - parseBold (), parseItalic (), linesToParagraphs () і parseBullets () - використовує метод replace () рядки з метою заміщення співпадаючих зразків, визначених регулярним виразом, щоб перетворити текст, що вводиться Wiki в текст формату HTML.
Перетворення зразків напівжирного і курсивного шрифтів
Метод parseBold () здійснює пошук зразка напівжирного шрифту Wiki (наприклад, '' 'foo' '') і перетворює його в еквівалентний текст HTML (наприклад, <b> foo </ b>) наступним чином:
private function parseBold (input: String): String {var pattern: RegExp = /'''(.*?)'''/g; return input.replace (pattern, "<b> $ 1 </ b>"); }
Слід зазначити, що частина (.? *) Регулярного виразу відповідає будь-якому числу символів (*) між двома визначальними зразками '' '. Квантіфікатор? робить збіг непоглощающіх з тим, щоб для рядка, наприклад: '' 'aaa' '' bbb '' 'ccc' '', першої збігається рядком була '' 'aaa' '', а не вся рядок (що знаходиться всередині зразка '' ').
Круглі дужки в регулярному виразі визначають групу збору, а метод replace () посилається на цю групу за допомогою коду $ 1 в замісної рядку. Прапор g (global) в регулярному виразі забезпечує заміщення методом replace () всіх збігів в рядку (а не тільки першого збігу).
Метод parseItalic () функціонує практично так само, як і метод parseBold (), за винятком того, що він перевіряє наявність двох (НЕ трьох) апострофів ( ''), що виконують роль обмежувачів курсивного тексту:
private function parseItalic (input: String): String {var pattern: RegExp = /''(.*?)''/g; return input.replace (pattern, "<i> $ 1 </ i>"); }
Перетворення зразків маркера абзацу
Як показує наступний приклад, метод parseBullet () здійснює пошук зразка рядки маркера абзацу Wiki, (наприклад, * foo) і перетворює його в еквівалентний текст HTML (наприклад, <li> foo </ li>):
private function parseBullets (input: String): String {var pattern: RegExp = /^\*(.*)/gm; return input.replace (pattern, "<li> $ 1 </ li>"); }
Символ ^ на початку регулярного виразу відповідає початку рядка. Прапор m (multiline) в регулярному виразі є причиною того, що регулярний вираз зіставляє символ ^ початку лінії, а не просто початку рядка.
Зразок \ * відповідає символу зірочки (зворотна коса риска використовується для позначення зірочки литерала замість квантіфікатора *).
Круглі дужки в регулярному виразі визначають групу збору, а метод replace () посилається на цю групу за допомогою коду $ 1 в замісної рядку. Прапор g (global) в регулярному виразі забезпечує заміщення методом replace () всіх збігів в рядку (а не тільки першого збігу).
Перетворення зразків Wiki абзацу
Метод linesToParagraphs () перетворює кожну лінію у вхідному рядку Wiki в тег абзацу <p> HTML. Лінії цього методу прибирають порожні лінії з вхідного рядка Wiki:
var pattern: RegExp = / ^ $ / gm; var result: String = input.replace (pattern, "");
Символи ^ і $ відповідають початку і кінця рядку регулярного виразу. Прапор (multiline) m в регулярному виразі є причиною того, що регулярний вираз зіставляє символ ^ початку лінії, а не просто початку рядка.
Метод replace () заміщає всі співпадаючі підрядка (порожні лінії) символом нового рядка ( ""). Прапор g (global) в регулярному виразі забезпечує заміщення методом replace () всіх збігів в рядку (а не тільки першого збігу).
Перетворення URL-адрес в теги <a> HTML
При натисканні в демонстраційному додатку кнопки «Перевірка» та встановлення прапорця urlToATag додаток викликає статичний метод URLParser.urlToATag () для перетворення рядків URL з вхідного рядка Wiki в теги <a> HTML.
var protocol: String = "((?: http | ftp): //)"; var urlPart: String = "([a-z0-9 _-] + \. [a-z0-9 _-] +)"; var optionalUrlPart: String = "(\. [a-z0-9 _-] *)"; var urlPattern: RegExp = new RegExp (protocol + urlPart + optionalUrlPart, "ig"); var result: String = input.replace (urlPattern, "<a href='$1$2$3'> <u> $ 1 $ 2 $ 3 </ u> </a>");
Конструктор RegExp () використовується для складання декількох складових частин в єдине регулярний вираз (urlPattern). Цими складовими частинами є окремі рядки, що утворюють частину зразка регулярного виразу.
Перша частина зразка регулярного виразу, яка визначається рядком protocol, визначає URL-протокол: або http: //, або ftp: //. Круглі дужки визначають групу без збору, позначену символом?. Це означає, що круглі дужки використовуються лише для того, щоб визначати групу для зразка перестановки |; ця група не буде відповідати кодам зворотних посилань ($ 1, $ 2, $ 3) в замісної рядку методу replace ().
Інші складові частини регулярного виразу використовують групи збору (позначені в зразку круглими дужками), які згодом використовуються в кодах зворотних посилань ($ 1, $ 2, $ 3) в замісної рядку методу replace ().
Частина зразка, яка визначається рядком urlPart, відповідає, по крайней мере, одному з наступних символів: az, 0-9, _ або -. Квантіфікатор + вказує на збіг принаймні одного символу. \. позначає символ (.) обов'язкової точки. І решта зразка відповідає іншому рядку з принаймні одним з таких символів: az, 0-9, _ або -.
Частина зразка, яка визначається рядком optionalUrlPart, відповідає нуль або більше разів наступного: символу точки (.), За яким йде ряд букв і цифр (в тому числі _ і -). Квантіфікатор * вказує на збіг нуля або більше символів.
При виклику методу replace () використовується регулярний вираз, а за допомогою зворотних посилань здійснюється складання заміщають рядків HTML.
Метод urlToATag () потім викликає метод emailToATag (), який для заміщення зразків електронної пошти рядками гіперпосилань <a> HTML використовує схожі механізми. Регулярні вирази, які використовуються в цьому демонстраційному файлі для підбору HTTP, FTP, URL-адрес електронної пошти, досить прості для приведення в якості прикладу; існують набагато більш складні регулярні вирази для більш правильного зіставлення таких URL-адрес.
Перетворення рядків символу долара США в рядки символу євро
При натисканні в демонстраційному додатку кнопки «Перевірка» та встановлення прапорця dollarToEuro додаток викликає статичний метод CurrencyConverter.usdToEuro () для перетворення рядків символу долара США (наприклад, "$ 9.95") в рядки символу євро (наприклад, "8.24 €") наступним чином:
var usdPrice: RegExp = /\$([\d,]+.\d+)+/g; return input.replace (usdPrice, usdStrToEuroStr);
Перша лінія визначає простий зразок для підбору рядків символу долара США. Зверніть увагу, що символу $ передує символ переходу \ зворотної косої межі.
Метод replace () використовує регулярний вираз як обнаружителя збігів зразків, а також викликає функцію usdStrToEuroStr () для визначення замісної рядки (значення в євро).
Коли ім'я функції використовується в якості другого параметра методу replace (), такі елементи передаються в викликану функцію в якості параметрів.
Збігається частина рядка.
Будь-які зібрані збігу груп в круглих дужках. Кількість переданих таким чином аргументів варіюється в залежності від кількості зібраних збігів груп в круглих дужках. Кількість зібраних збігів груп в круглих дужках можна визначити, перевіривши значення параметра arguments.length - 3 в коді функції.
Позиція в індексі в рядку, де починається збіг.
Рядок повністю.
Метод usdStrToEuroStr () перетворює зразки рядків символу долара США в рядки символу євро наступним чином:
private function usdToEuro (... args): String {var usd: String = args [1]; usd = usd.replace ( ",", ""); var exchangeRate: Number = 0.828017; var euro: Number = Number (usd) * exchangeRate; trace (usd, Number (usd), euro); const euroSymbol: String = String.fromCharCode (8364); // € return euro.toFixed (2) + "" + euroSymbol; }
Зверніть увагу, що args [1] являє зібрану групу в круглих дужках, підібрану регулярним виразом usdPrice. Це числова частина рядка символу долара США: сума доларів без знака $. Даний метод використовує перетворення курсів валют і повертає підсумковий рядок (з замикаючим символом € замість провідного символу $).
Квантіфікатор?Круглі дужки визначають групу без збору, позначену символом?