Flash CS3 文档 |
|||
| ActionScript 3.0 编程 > 使用正则表达式 > 正则表达式语法 > 标志和属性 | |||
下表列出了可以为正则表达式设置的五种标志。每种标志都可以作为正则表达式对象属性进行访问。
|
标志 |
属性 |
描述 |
|---|---|---|
|
|
|
匹配多个匹配。 |
|
|
|
不区分大小写的匹配。应用于 |
|
|
|
设置此标志后, |
|
|
|
设置此标志后, |
|
|
|
允许扩展的正则表达式。您可以在正则表达式中键入空格,它将作为模式的一部分被忽略。这可使您更加清晰可读地键入正则表达式代码。 |
请注意这些属性都是只读属性。您在设置正则表达式变量时,可以设置标志(g、i、m、s 和 x),如下所示:
var re:RegExp = /abc/gimsx;
但是,您无法直接设置命名属性。例如,下列代码将导致错误:
var re:RegExp = /abc/; re.global = true; // 这会产生错误。
默认情况下,除非您在正则表达式声明中指定这些标志,否则不会设置,并且相应的属性也会设置为 false。
另外,还有其它两种正则表达式属性:
lastIndex 属性指定字符串中的索引位置以用于下次调用正则表达式的 exec() 或 test() 方法。 source 属性指定定义正则表达式的模式部分的字符串。如果不设置 g (global) 标志,正则表达式匹配将不超过一个。例如,如果正则表达式中不包含 g 标志,String.match() 方法只返回一个匹配的子字符串:
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/; trace(str.match(pattern)) // 输出:she
如果设置 g 标志,Sting.match() 方法将返回多个匹配,如下所示:
var str:String = "she sells seashells by the seashore."; var pattern:RegExp = /sh\w*/g; // 模式相同,但是这次设置了 g 标志。 trace(str.match(pattern)); // 输出:she,shells,shore
默认情况下,正则表达式匹配区分大小写。如果设置 i (ignoreCase) 标志,将忽略区分大小写。例如,正则表达式中的小写字母 s 不会匹配大写字母 S(字符串中的第一个字符):
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/)); // 输出:13 -- 不是第一个字符
但是如果设置 i 标志,正则表达式将匹配大写字母 S:
var str:String = "She sells seashells by the seashore."; trace(str.search(/sh/i)); // 输出:0
i 标志仅忽略 A-Z 和 a-z 字符的大小写,而不忽略扩展字符的大小写,如 É 和 é。
如果未设置 m (multiline) 标志,^ 将匹配字符串的开头,而 $ 匹配字符串的结尾。如果设置 m 标志,这些字符将分别匹配行的开头和结尾。请考虑使用下列包含换行符的字符串:
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/g)); // 匹配字符串开头的单词。
即使在正则表达式中设置 g (global) 标志,match() 方法也会只匹配一个子字符串,因为对于 ^(字符串开头)只有一个匹配。输出结果为:
Test
下面是设置了 m 标志的同一段代码:
var str:String = "Test\n"; str += "Multiline"; trace(str.match(/^\w*/gm)); // 匹配每行开头的单词。
这次输出结果同时包含两行开头的单词:
Test,Multiline
请注意,只有 \n 字符表示行的结束。下列字符不表示行的结束:
\r) 字符\u2028) 字符\u2029) 字符如果未设置 s(dotall 或“dot all”)标志,则正则表达式中的点 (.) 将不匹配换行符 (\n)。因此,下面的示例没有匹配:
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/; trace(str.match(re));
但是,如果设置了 s 标志,点就匹配换行符:
var str:String = "<p>Test\n"; str += "Multiline</p>"; var re:RegExp = /<p>.*?<\/p>/s; trace(str.match(re));
在本例中,匹配内容是 <p> 标记内的整个子字符串,其中包括换行符:
<p>Test Multiline</p>
正则表达式有时很难阅读,特别是当其包含很多元字符和元序列时。例如:
/<p(>|(\s*[^>]*>)).*?<\/p>/gi
在正则表达式中使用 x (extended) 标志时,则会忽略在模式中键入的所有空格。例如,下面的正则表达式同前面的示例相同:
/ <p (> | (\s* [^>]* >)) .*? <\/p> /gix
如果设置了 x 标志,而且希望匹配空格字符,则应在空格前加上反斜杠。例如,以下两个正则表达式是等效的:
/foo bar/ /foo \ bar/x
lastIndex 属性在字符串中指定开始进行下一次搜索的索引位置。对于将 g 标志设置为 true 的正则表达式,此属性会影响对该表达式调用的 exec() 和 test() 方法。例如,请考虑使用以下代码:
var pattern:RegExp = /p\w*/gi;
var str:String = "Pedro Piper picked a peck of pickled peppers.";
trace(pattern.lastIndex);
var result:Object = pattern.exec(str);
while (result != null)
{
trace(pattern.lastIndex);
result = pattern.exec(str);
}
默认情况下,将 lastIndex 属性设置为 0(从字符串的开头开始搜索)。每次匹配完成后,都会设为该匹配后的索引位置。因此,前面代码的输出如下所示:
0 5 11 18 25 36 44
如果将 global 标志设置为 false,则 exec() 和 test() 方法不会使用或设置 lastIndex 属性。
String 类的 match()、replace() 和 search() 方法都从字符串的开头进行搜索,而不考虑调用该方法时所使用的正则表达式中的 lastIndex 属性设置。(但是,match() 方法不会将 lastIndex 设为 0。)
可以设置 lastIndex 属性来调整正则表达式匹配时字符串中的起始位置。
source 属性指定用于定义正则表达式的模式部分的字符串。例如:
var pattern:RegExp = /foo/gi; trace(pattern.source); // foo
Flash CS3
当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000119.html