Донецкий техникум промышленной автоматики

Adobe Flash Platform * Пошук подстрок і шаблонів в рядках

  1. Пошук підрядка по позиції символу
  2. Пошук позиції символу відповідної подстроки
  3. Створення масиву подстрок, розбитих на основі роздільників
  4. Пошук шаблонів в рядках і заміна подстрок
  5. Пошук відповідних подстрок
  6. Заміна збіглися подстрок

Підрядки - це послідовні символи в рядку

Підрядки - це послідовні символи в рядку. Наприклад, рядок "abc" має наступні підрядка: "", "a", "ab", "abc", "b", "bc", "c". Для знаходження подстрок в рядку можна користуватися методами ActionScript.

В ActionScript шаблони визначаються за допомогою рядків або регулярних виразів. Наприклад, ось який регулярний вираз визначає конкретний шаблон: за буквами A, B і C слід цифра (косі риси є роздільниками в регулярних виразах).

/ ABC \ d /

ActionScript включає методи для пошуку шаблонів в рядках і для заміни знайдених відповідностей на заміщають підрядка. Ці методи описуються в наступних розділах.

Регулярні вирази дозволяють визначати досить складні шаблони. Додаткові відомості див. У розділі « Використання регулярних виразів ».

Пошук підрядка по позиції символу

Методи substr () і substring () мають багато спільного. Вони обидва повертають подстроку заданої рядки. Вони обидва приймають два параметра. В обох методах перший параметр вказує позицію початкового символу в цьому рядку. Однак в методі substr () другим параметром є length, що містить довжину повертається підрядка, а в методі substring () - параметр end, що містить позицію символу в кінці підрядка (який не включений в возвращаемую рядок). У цьому прикладі демонструється відмінність цих двох методів.

var str: String = "Hello from Paris, Texas !!!"; trace (str.substr (11,15)); // output: Paris, Texas !!! trace (str.substring (11,15)); // output: Pari

Метод slice () схожий на метод substring (). Коли в якості параметрів задані невід'ємні цілі числа, він працює практично так само. Однак метод slice () може приймати в якості параметрів і негативні числа. У цьому випадку позиція символу вважається від кінця рядка, як в наступному прикладі.

var str: String = "Hello from Paris, Texas !!!"; trace (str.slice (11,15)); // output: Pari trace (str.slice (-3, -1)); // output: !! trace (str.slice (-3,26)); // output: !!! trace (str.slice (-3, str.length)); // output: !!! trace (str.slice (-8, -3)); // output: Texas

Як параметри методу slice () можна вказати комбінацію з негативного і невід'ємного чисел.

Пошук позиції символу відповідної подстроки

Методи indexOf () і lastIndexOf () можна використовувати для пошуку відповідних подстрок в рядку, як в наступному прикладі.

var str: String = "The moon, the stars, the sea, the land"; trace (str.indexOf ( "the")); // output: 10

Зверніть увагу на те, що метод indexOf () враховує регістр.

Можна задати другий параметр, щоб вказати позицію індексу в рядку, з якої слід починати пошук, як показано нижче.

var str: String = "The moon, the stars, the sea, the land" trace (str.indexOf ( "the", 11)); // output: 21

Метод lastIndexOf () знаходить останнє входження підрядка в рядку.

var str: String = "The moon, the stars, the sea, the land" trace (str.lastIndexOf ( "the")); // output: 30

Якщо для методу lastIndexOf () вказати другий параметр, пошук виконується починаючи з заданої позиції в зворотному порядку (справа наліво).

var str: String = "The moon, the stars, the sea, the land" trace (str.lastIndexOf ( "the", 29)); // output: 21

Створення масиву подстрок, розбитих на основі роздільників

За допомогою методу split () можна створити масив подстрок, розбитих на основі використовуваних символів-роздільників. Наприклад, рядок, розділену комами або табуляції, можна розбити на кілька подстрок.

У наступному прикладі показано, як можна розбити масив на підрядка, використовуючи як роздільник амперсанд (&).

var queryStr: String = "first = joe & last = cheng & title = manager & StartDate = 3/6/65"; var params: Array = queryStr.split ( "&", 2); // params == [ "first = joe", "last = cheng"]

Другий, необов'язковий параметр методу split () визначає максимальний розмір повертається масиву.

Як роздільник можна також використовувати регулярний вираз.

var str: String = "Give me \ t5." var a: Array = str.split (/ \ s + /); // a == [ "Give", "me", "5."]

Додаткові відомості див. У розділі « Використання регулярних виразів »І в Довідник ActionScript® 3.0 для платформи Adobe® Flash® Platform .

Пошук шаблонів в рядках і заміна подстрок

Клас String включає наступні методи для роботи з шаблонами в рядках.

  • Методи match () і search () служать для пошуку подстрок, відповідних шаблоном.

  • Метод replace () служить для пошуку подстрок, відповідних шаблоном, і їх заміни заданої підрядком.

Ці методи описуються в наступних розділах.

Для визначення шаблонів, що використовуються в цих методах, можна використовувати такі рядки або регулярні вирази. Додаткові відомості про регулярні вирази див. В розділі « Використання регулярних виразів ».

Пошук відповідних подстрок

Метод search () повертає позицію індексу першої підрядка, відповідної заданим шаблоном, як в наступному прикладі.

var str: String = "The more the merrier."; // (This search is case-sensitive.) Trace (str.search ( "the")); // output: 9

Для визначення шаблону відповідності можна використовувати регулярні вирази, як показано нижче.

var pattern: RegExp = / the / i; var str: String = "The more the merrier."; trace (str.search (pattern)); // 0

Метод trace () видає значення 0, так як перший символ в ладі має позицію індексу 0. У регулярному виразі встановлюється прапор i, щоб при пошуку не враховувався регістр.

Метод search () знаходить тільки одне відповідність і повертає його початкову позицію індексу, навіть якщо в регулярному виразі заданий прапор g (global).

У наступному прикладі показано більш складне регулярний вираз, що дозволяє знайти відповідність рядка, укладеної в подвійні лапки.

var pattern: RegExp = / "[^"] * "/; var str: String =" The \ "more \" the merrier. "; trace (str.search (pattern)); // output: 4 str =" The \ "more the merrier."; trace (str.search (pattern)); // output: -1 // (Indicates no match, since there is no closing double quotation mark.)

Метод match () працює подібним чином. Він виконує пошук відповідної підрядка. Однак, коли в шаблоні регулярного виразу встановлений прапор global, як в наступному прикладі, метод match () повертає масив відповідних значень.

var str: String = "[email protected], [email protected]"; var pattern: RegExp = /\w*@\w*\.[org|com]+/g; var results: Array = str.match (pattern);

Масиву result присвоюється таке значення:

[ "[email protected]", "[email protected]"]

Додаткові відомості про регулярні вирази див. В розділі « Використання регулярних виразів ».

Заміна збіглися подстрок

За допомогою методу replace () можна знайти потрібний шаблон в рядку і замінити відповідності заданої замісної рядком, як в наступному прикладі.

var str: String = "She sells seashells by the seashore."; var pattern: RegExp = / sh / gi; trace (str.replace (pattern, "sch")); // sche sells seaschells by the seaschore.

Зверніть увагу, що в цьому прикладі в збіглися рядках не враховується регістра, так як в регулярному виразі встановлений прапор i (ignoreCase), і робиться кілька замін, так як встановлений прапор g (global). Додаткові відомості див. У розділі « Використання регулярних виразів ».

У замещающую рядок можна включити такі заміщають коди з $. Замість заміщає коду з $ вставляється заміщає текст, наведений у наступній таблиці.

Код з $

замісник текст

$$

$

$ &

Збіглася подстрока.

$ `

Частина рядка, що передує збіглася підрядку. У цьому коді використовується пряма ліва одинарна лапка ( `), а не пряма одинарна лапка ( ') або ліва фігурна лапки (').

$ '

Частина рядка, яка передує збіглася підрядку. Цей код використовує пряму одиночну лапки ( ').

$ n

Зареєстроване збіг групи в дужках n, де n - це цифра від 1 до 9, а за $ n годі було десяткове число.

$ nn

Зареєстроване збіг групи в дужках nn, де nn десяткове двозначне число (від 01 до 99). Якщо запис nn не визначена, як заміщає тексту використовується порожній рядок.

Наприклад, нижче показано застосування заміщають кодів $ 2 і $ 1, що представляють першу і другу зареєстровані збіглися групи:

var str: String = "flip-flop"; var pattern: RegExp = / (\ w +) - (\ w +) / g; trace (str.replace (pattern, "$ 2- $ 1")); // flop-flip

Також можна використовувати функцію в якості другого параметра методу replace (). Співпав текст замінюється повернутим значенням функції.

var str: String = "Now only $ 9.95!"; var price: RegExp = /\$([\d,]+.\d+)+/i; trace (str.replace (price, usdToEuro)); function usdToEuro (matchedSubstring: String, capturedMatch1: String, index: int, str: String): String {var usd: String = capturedMatch1; usd = usd.replace ( ",", ""); var exchangeRate: Number = 0.853690; var euro: Number = parseFloat (usd) * exchangeRate; const euroSymbol: String = String.fromCharCode (8364); return euro.toFixed (2) + "" + euroSymbol; }

Коли в якості другого параметра методу replace () використовується функція, їй передаються такі аргументи:

  • Збігається частина рядка.

  • Зареєстровані збігу групи. Кількість переданих таким чином аргументів варіюється в залежності від кількості збігів в дужках. Кількість збігів в дужках можна визначити, перевіривши значення параметра arguments.length - 3 в коді функції.

  • Позиція в індексі в рядку, де починається збіг.

  • Рядок повністю.