首頁 > web前端 > js教程 > JavaScript正規表示式的瀏覽器的差異

JavaScript正規表示式的瀏覽器的差異

黄舟
發布: 2016-12-20 15:47:57
原創
1320 人瀏覽過

JavaScript中的正規表示式在不同的瀏覽器中得到的結果可能會有差異,下面把正規表示式在五大主流瀏覽器(IE、Firefox、Chrome、Safari、Opera,以當前版本為準)之間的差異整理一下羅列出來。

1. Firefox和Chrome會過度優化在循環(以及其中內嵌的函數定義)中創建的正則表達式,似乎它們在假設寫JavaScript的人會把正則表達式的構建和賦值寫錯地方。

var r;
for(var i = 0; i < 2; i++){
  var x = /abc/g;
  if(r)
    // 第二个循环时Firefox和Chrome会输出“true”
    document.write(r == x); 
  else
    r = x;
}
登入後複製

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

// IE会输出“13”,而其它浏览器输出“1undefined3”
document.write(&#39;123&#39;.replace(/2/, function(){}));
登入後複製

3. 如果使用new RegExp的形式建立正規表示式時使用一個已有的正規表示式實例作為參數,那麼大部分瀏覽器都會建立一個基本功能相同,但完全獨立的、全新的正規表示式實例;而Safari則會很乾脆地傳回那個作為參數的正規表示式實例。

var r = /1/;
// Safari会输出“true”,而其它浏览器输出为“false”
document.write(new RegExp(r) == r);
登入後複製

4. 如果把一個“空”的正則表達式直接轉換成字串,IE以外的瀏覽器都會得到“/(?:)/”,而IE會得到“//”——但從正則表達式上直接提取source屬性的時候,得到的都是空字串。

// IE输出“//”,其它浏览器输出“/(?:)/”
document.write(new RegExp(&#39;&#39;)); 
// IE输出“undefined”,其它浏览器输出“/(?:)/”
document.write(eval(&#39;&#39; + new RegExp(&#39;&#39;)))
登入後複製

5. 如果把一個包含斜線“/”的正規表示式直接轉換成字串-以“new RegExp('/')”為例,只有Firefox和Opera會得到“///”,並且直接提取source屬性會得到“/”;而其它瀏覽器則會得到“///”,並且直接提取source屬性會得到“/”。

// Firefox和Opera输出“/\//”,其它浏览器输出“///”
document.write(new RegExp(&#39;/&#39;)); 
// Firefox和Opera输出“/\//”,其它浏览器输出“undefined”
document.write(eval(&#39;&#39; + new RegExp(&#39;/&#39;)))
登入後複製

6. 如果在使用字面表達式來定義一個正則表達式時,使用了無效的選項標誌(例如“/abc/n”),則Chrome和Safari會完全忽視此無效選項標誌(等同於“ /abc/”),而在其它瀏覽器會導致語法錯誤。

// Chrome和Safari会输出“/abc/”,其它浏览器中产生语法错误
document.write(/abc/n);
登入後複製

7. 如果透過建構器來建立正規表示式時,為其指定選項標誌的(第二個)字串參數中包含了非有效標誌的字符,在Firefox中就會引起一個異常,而其它瀏覽器會將無效的部分忽略。

// Firefox中会引起一个异常,提示无效的标志;而其它浏览器会输出“/1/
document.write(new RegExp(&#39;1&#39;, &#39;n&#39;)); ”
登入後複製

 以上就是JavaScript正規表示式的瀏覽器的差異 的內容,更多相關內容請關注PHP中文網(www.php.cn)! 


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
JavaScript鉤子函數是什麼?
來自於 1970-01-01 08:00:00
0
0
0
怎麼實作 JavaScript點與圓的位置關係
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板