Поиск подстрок и шаблонов в строкахFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий Подстроки — это последовательные символы в строке. Например, строка "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."] Дополнительные сведения см. в разделе «Использование регулярных выражений» и в cправочнике ActionScript® 3.0 для платформы Adobe® Flash® Platform. Поиск шаблонов в строках и замена подстрокКласс String включает следующие методы для работы с шаблонами в строках.
Эти методы описываются в последующих разделах. Для определения шаблонов, используемых в этих методах, можно использовать строки или регулярные выражения. Дополнительные сведения о регулярных выражениях см. в разделе «Использование регулярных выражений». Поиск соответствующих подстрокМетод 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 = "bob@example.com, omar@example.org"; var pattern:RegExp = /\w*@\w*\.[org|com]+/g; var results:Array = str.match(pattern); Массиву result присваивается следующее значение: ["bob@example.com","omar@example.org"] Дополнительные сведения о регулярных выражениях см. в разделе «Использование регулярных выражений». Замена совпавших подстрокС помощью метода 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). Дополнительные сведения см. в разделе «Использование регулярных выражений». В замещающую строку можно включить следующие замещающие коды с $. Вместо замещающего кода с $ вставляется замещающий текст, приведенный в следующей таблице.
Например, ниже показано применение замещающих кодов $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() используется функция, ей передаются следующие аргументы:
|
|