Подстроки — это последовательные символы в строке. Например, строка
"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 включает следующие методы для работы с шаблонами в строках.
-
Методы
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 = "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
). Дополнительные сведения см. в разделе «
Использование регулярных выражений
».
В замещающую строку можно включить следующие замещающие коды с
$
. Вместо замещающего кода с
$
вставляется замещающий текст, приведенный в следующей таблице.
Код с $
|
Замещающий текст
|
$$
|
$
|
$&
|
Совпавшая подстрока.
|
$`
|
Часть строки, предшествующая совпавшей подстроке. В этом коде используется прямая левая одинарная кавычка (
`
), а не прямая одинарная кавычка (
'
) или левая фигурная кавычка (
'
).
|
$'
|
Часть строки, которая предшествует совпавшей подстроке. Этот код использует прямую одиночную кавычку (
'
).
|
$
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
в коде функции.
-
Позиция в индексе в строке, где начинается совпадение.
-
Строка полностью.
|
|
|