你不一定知道的關於JavaScript的Regex

來源:互聯網
上載者:User

這兩天在用Regex搞一個稍微有點複雜的東西,但是不同瀏覽器之間的差異可浪費了我不少的人蔘。

現在我把Regex在五大主流瀏覽器(IE、Firefox、Chrome、Safari、Opera,以目前的版本為準)之間的差異整理一下羅列出來,給大家,也算給我自己做一個備忘。

1、Firefox和Chrome會過度最佳化在迴圈(以及其中內嵌的函數定義)中建立的Regex,似乎它們在假設寫JavaScript的人會把Regex的構建和賦值寫錯地方。 複製代碼 代碼如下:var r;
for(var i = 0; i < 2; i++){
var x = /abc/g;
if(r)
document.write(r == x); // 第二個迴圈時Firefox和Chrome會輸出“true”
else
r = x;
}

2、如果你把一個有可能什麼也不返回的函數作為第二個參數傳遞給replace方法,那麼IE可能會直接刪除匹配的文本(在之前的測試中我總結的是Opera的行為比較獨特,現在看起來似乎是錯誤的結論),而其它瀏覽器則是會將匹配的文本替換成“undefined”。 複製代碼 代碼如下:document.write('123'.replace(/2/, function(){})); // IE會輸出“13”,而其它瀏覽器輸出“1undefined3”

3、如果使用new RegExp的形式建立Regex時使用一個已有的Regex執行個體作為參數,那麼大部分瀏覽器都會建立一個準系統相同,但完全獨立的、全新的Regex執行個體;而Safari則會很乾脆地返回作為參數的那個Regex執行個體。 複製代碼 代碼如下:var r = /1/;
document.write(new RegExp(r) == r); // Safari會輸出“true”,而其它瀏覽器輸出為“false”

4、如果把一個“空”的Regex直接轉化成字串,IE以外的瀏覽器都會得到“/(?:)/”,而IE會得到“//”——但從Regex上直接提取source屬性的時候,得到的都是Null 字元串。 複製代碼 代碼如下:document.write(new RegExp('')); // IE輸出“//”,其它瀏覽器輸出“/(?:)/”
document.write(eval('' + new RegExp(''))) // IE輸出“undefined”,其它瀏覽器輸出“/(?:)/”

5、如果把一個包含斜線“/”的Regex直接轉化成字串——以“new RegExp('/')”為例,只有Firefox和Opera會得到“/\//”,並且直接提取source屬性會得到“\/”;而其它瀏覽器則會得到“///”,且直接提取source屬性會得到“/”。 複製代碼 代碼如下:document.write(new RegExp('/')); // Firefox和Opera輸出“/\//”,其它瀏覽器輸出“///”
document.write(eval('' + new RegExp('/'))) // Firefox和Opera輸出“/\//”,其它瀏覽器輸出“undefined”

6、如果在使用字面運算式來定義一個Regex時,使用了無效的選項標誌(例如“/abc/n”),則Chrome和Safari會完全忽視此無效選項標誌(等同於“/abc/”),而在其它瀏覽器會導致語法錯誤。 複製代碼 代碼如下:document.write(/abc/n); // Chrome和Safari會輸出“/abc/”,其它瀏覽器中產生語法錯誤

7、如果通過構造器來建立Regex時,為其指定選項標誌的(第二個)字串參數中包含了非有效標誌的字元,在Firefox中就會引起一個異常,而其它瀏覽器會將無效的部分忽略。 複製代碼 代碼如下:document.write(new RegExp('1', 'n')); // Firefox中會引起一個異常,提示無效的標誌;而其它瀏覽器會輸出“/1/”

暫時就這些吧,發現新的再補上。
來自:http://www.cnblogs.com/NanaLich

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.