Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Adobe Flash Platform * Приклад регулярних виразів: синтаксичний аналізатор Wiki

  1. Визначення класу WikiParser
  2. Перетворення зразків напівжирного і курсивного шрифтів
  3. Перетворення зразків маркера абзацу
  4. Перетворення зразків Wiki абзацу
  5. Перетворення URL-адрес в теги <a> HTML
  6. Перетворення рядків символу долара США в рядки символу євро

Простий приклад перетворення тексту Wiki показує ряд випадків застосування регулярних виразів

Простий приклад перетворення тексту 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. Це числова частина рядка символу долара США: сума доларів без знака $. Даний метод використовує перетворення курсів валют і повертає підсумковий рядок (з замикаючим символом € замість провідного символу $).

Квантіфікатор?
Круглі дужки визначають групу без збору, позначену символом?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.