ECMAScript 與標準比對行為的比較
更新:2007 年 11 月
ECMAScript 和標準規則運算式的行為有三方面的不同:
字元類別在比對運算式中是以不同方式指定的。標準規則運算式預設支援 Unicode 字元類別。ECMAScript 不支援 Unicode。
具有本身反向參考的規則運算式擷取類別必須以每個擷取重複項目來更新。
八進位逸出字元和反向參考之間的語意模糊會以不同方式處理。
注意事項: |
---|
根據預設,規則運算式引擎會使用標準比對行為。當 Regex.Regex(String, RegexOptions) 建構函式 (Constructor) 或 Regex.Match(String, String, RegexOptions)、Regex.Matches(String, String, RegexOptions) 和 Regex.Replace(String, String, String, RegexOptions) 等規則運算式比對方法的 options 參數包含 RegexOptions.ECMAScript 旗標時,則會使用 ECMAScript 相容行為。 |
下表概述由標準和 ECMAScript 規則運算式所解譯八進位與反向參考之間的差異。
標準規則運算式行為 |
ECMAScript 行為 |
---|---|
如果 \ 後面接著 0,再後接 0 到 2 的八進位數字,則會解譯為八進位。例如, \044 永遠代表 '$'。 |
相同行為。 |
如果 \ 後面接著 1 到 9 的數字,而其後沒有其他十進位數字,則會解譯為反向參考。例如,\9 永遠表示反向參考 9,即使擷取 9 並不存在。如果擷取不存在,則規則運算式剖析器會擲回語法例外狀況。 |
如果單一十進位數字擷取存在的話,則反向參考到該數字。否則,解譯為常值 (Literal)。 |
如果 \ 後面接著 1 到 9 的數字,再後接其他十進位數字,則會將數字轉換成十進位值。如果該擷取存在的話,則會將運算式解譯為反向參考。 否則,會解譯為最多使用八進位 377 值的前置八進位數字,也就是說只考慮此值的 8 個低位元;而將剩餘的數字解譯為常值。例如,在運算式 \3000 中,如果擷取 300 存在的話,則解譯為反向參考 300。如果擷取 300 不存在的話,則解譯為八進位 300 後面接著 0。 |
如果 \ 後面接著 1 到 9 的數字,再接著任何其他十進位數字,則藉由盡可能將最多數字轉換成可以參考擷取的十進位值來解譯為反向參考。如果沒有可以轉換的數字,則會解譯為最多使用八進位 377 值之前置八進位數字的八進位;而解譯剩餘數字為常值。 |