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
(全局)标志。
下例展示一个更复杂的正则表达式,该表达式匹配被双引号引起来的字符串:
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()
方法的工作方式与此类似。它搜索一个匹配的子字符串。但是,如果在正则表达式模式中使用了全局标志(如下例所示),
match()
将返回一个包含匹配子字符串的数组:
var str:String = "bob@example.com, omar@example.org";
var pattern:RegExp = /\w*@\w*\.[org|com]+/g;
var results:Array = str.match(pattern);
对
results
数组进行如下设置:
["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()
方法的第二个形参时,将向该函数传递如下实参: