群組Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本 您可以使用括號在規則運算式中指定群組,如下所示: /class-(\d*)/ 群組是模式的子區段。您可以使用群組來執行下列作業:
下列章節提供有關群組使用方式的詳細資訊。 搭配數量詞使用群組如果您不使用群組,數量詞會套用至其前面的字元或字元類別,如下所示: var pattern:RegExp = /ab*/ ; // matches the character a followed by // zero or more occurrences of the character b pattern = /a\d+/; // matches the character a followed by // one or more digits pattern = /a[123]{1,3}/; // matches the character a followed by // one to three occurrences of either 1, 2, or 3 然而,您可以使用群組,將數量詞套用至一個以上的字元或字元類別: var pattern:RegExp = /(ab)*/; // matches zero or more occurrences of the character a // followed by the character b, such as ababab pattern = /(a\d)+/; // matches one or more occurrences of the character a followed by // a digit, such as a1a5a8a3 pattern = /(spam ){1,3}/; // matches 1 to 3 occurrences of the word spam followed by a space 如需有關數量詞的詳細資訊,請參閱數量詞。 使用帶有替代 (|) 字元的群組您可以使用群組來定義您要套用替代 (|) 字元的字元群組,如下所示: var pattern:RegExp = /cat|dog/; // matches cat or dog pattern = /ca(t|d)og/; // matches catog or cadog 使用群組來擷取子字串相符項目若您在模式中定義標準的括號群組,那麼稍後就可以在規則運算式中加以參考。這就稱為「後參考」,而這類群組稱為「擷取群組」。例如,在下列規則運算式中,序列 \1 會比對與擷取括號群組相符的任何子字串: var pattern:RegExp = /(\d+)-by-\1/; // matches the following: 48-by-48 您可以在規則運算式中指定最多 99 個這種後參考,只要輸入 \1、\2、...、\99 即可。 同樣的,在 String 類別的 replace() 方法中,您可以使用 $1–$99,在取代字串中插入所擷取的群組子字串相符項目: var pattern:RegExp = /Hi, (\w+)\./; var str:String = "Hi, Bob."; trace(str.replace(pattern, "$1, hello.")); // output: Bob, hello. 另外,若使用擷取群組,RegExp 類別的 exec() 方法和 String 類別的 match() 方法會傳回與擷取群組相符的子字串: var pattern:RegExp = /(\w+)@(\w+).(\w+)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example,com 使用非擷取群組和 lookahead 群組非擷取群組僅用於群組,而不是「收集而來」的,而且不符合已編號的後參考,使用 (?: 和 ) 來定義非擷取群組的情況將如下所示: var pattern = /(?:com|org|net); 舉例來說,請注意在擷取群組與非擷取群組中放置 (com|org) 的差異 (exec() 方法將擷取群組列在完全相符的項目之後): var pattern:RegExp = /(\w+)@(\w+).(com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example,com //noncapturing: var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@example.com,bob,example lookahead 群組是一種特殊類型的非擷取群組,這種群組共有兩種類型:「正 lookahead 群組」和「負 lookahead 群組」。 使用 (?= 和 ) 來定義正 lookahead 群組的話,此群組指定群組中的子模式必須在位置上相符。然而,字串中符合正 lookahead 群組的部分,可以比對規則運算式中其餘模式。例如,由於 (?=e) 在下列程式碼中是正 lookahead 群組,它所比對的字元 e 可藉由規則運算式的後續部分進行比對。在此範例中,是擷取群組 \w*): var pattern:RegExp = /sh(?=e)(\w*)/i; var str:String = "Shelly sells seashells by the seashore"; trace(pattern.exec(str)); // Shelly,elly 使用 (?! 和 ) 來定義負 lookahead 群組的話,此群組指定群組中的子模式「不得」在位置上相符。例如: var pattern:RegExp = /sh(?!e)(\w*)/i; var str:String = "She sells seashells by the seashore"; trace(pattern.exec(str)); // shore,ore 使用已命名群組已命名群組是規則運算式中一種群組類型,具有已命名的識別名稱。請使用 (?P<name> 和 ) 來定義已命名群組。例如,下列規則運算式包含帶有名為 digits 識別名稱的已命名群組: var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/; 當您使用 exec() 方法時,會新增相符的已命名群組,以做為 result 陣列的屬性: var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/; var str:String = "a123bcd"; var result:Array = myPattern.exec(str); trace(result.digits); // 123 以下是另一個範例,它使用兩個已命名群組,識別名稱是 name 和 dom: var emailPattern:RegExp = /(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/; var address:String = "bob@example.com"; var result:Array = emailPattern.exec(address); trace(result.name); // bob trace(result.dom); // example 備註: 已命名群組並非 ECMAScript 語言規格的一部分,而是 ActionScript 3.0 的附加功能。
|
|