数量表示符

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

使用数量表示符指定字符或序列在模式中的重复次数,如下所示:

数量表示符元字符

说明

* (星号)

匹配前面重复零次或多次的项目。

+ (加号)

匹配前面重复一次或多次的项目。

? (问号)

匹配前面重复零次或一次的项目。

{ n }

{ n ,}

{ n , n }

指定前一项目的数值数量或数量范围:

/A{27}/ 匹配重复 27 次的字符 A。

/A{3,}/ 匹配重复 3 次或更多次的字符 A。

/A{3,5}/ 匹配重复 3 到 5 次的字符 A。

您可以将数量表示符应用到单个字符、字符类或组:

  • /a+/ 匹配重复一次或多次的字符 a

  • /\d+/ 匹配一个或多个数字。

  • /[abc]+/ 匹配重复的一个或多个字符,这些字符可能是 a b c 中的某个。

  • /(very, )*/ 匹配重复零次或多次的后跟逗号和空格的单词 very

您可以在应用数量表示符的括号组内使用数量表示符。例如,下面的数量表示符匹配诸如 word word-word-word 的字符串:

/\w+(-\w+)*/

默认情况下,正则表达式执行所谓的“无限匹配” 正则表达式中的任何子模式(如 .* )都会尝试在字符串中匹配尽可能多的字符,然后再执行正则表达式的下一部分。例如,使用以下正则表达式和字符串:

var pattern:RegExp = /<p>.*<\/p>/; 
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";

正则表达式匹配整个字符串:

<p>Paragraph 1</p> <p>Paragraph 2</p>

但是,假如您只想匹配一个 <p>...</p> 组。则可以通过以下操作实现:

<p>Paragraph 1</p>

在所有数量表示符后添加问号 ( ? ) 以将其更改为所谓的“惰性数量表示符”。例如,下面的正则表达式使用惰性数量表示符 *? 匹配 <p> 后跟数量最少(惰性)的字符,再跟 </p> 的模式:

/<p>.*?<\/p>/

有关数量表示符,请牢记以下几点:

  • 数量表示符 {0} {0,0} 不会从匹配中排除项目。

  • 不要结合使用多个数量表示符,例如 /abc+*/ 中。

  • 在除非设置 s ( dotall ) 标志,否则不会跨越多行,即使后跟 * 数量表示符。例如,请看以下代码:

    var str:String = "<p>Test\n"; 
    str += "Multiline</p>"; 
    var re:RegExp = /<p>.*<\/p>/; 
    trace(str.match(re)); // null; 
     
    re = /<p>.*<\/p>/s; 
    trace(str.match(re)); 
        // output: <p>Test 
        //                    Multiline</p>

有关详细信息,请参阅 标志和属性