站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        你不一定知道的關(guān)于JavaScript的正則表達式

        這兩天在用正則表達式搞一個稍微有點復(fù)雜的東西,但是不同瀏覽器之間的差異可浪費了我不少的人參。

        現(xiàn)在我把正則表達式在五大主流瀏覽器(IE、Firefox、Chrome、Safari、Opera,以當(dāng)前版本為準(zhǔn))之間的差異整理一下羅列出來,給大家,也算給我自己做一個備忘。

        1、Firefox和Chrome會過度優(yōu)化在循環(huán)(以及其中內(nèi)嵌的函數(shù)定義)中創(chuàng)建的正則表達式,似乎它們在假設(shè)寫JavaScript的人會把正則表達式的構(gòu)建和賦值寫錯地方。

        復(fù)制代碼 代碼如下:
        var r;
        for(var i = 0; i < 2; i++){
        var x = /abc/g;
        if(r)
        document.write(r == x); // 第二個循環(huán)時Firefox和Chrome會輸出“true”
        else
        r = x;
        }

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

        復(fù)制代碼 代碼如下:
        document.write(‘123’.replace(/2/, function(){})); // IE會輸出“13”,而其它瀏覽器輸出“1undefined3”

        3、如果使用new RegExp的形式創(chuàng)建正則表達式時使用一個已有的正則表達式實例作為參數(shù),那么大部分瀏覽器都會創(chuàng)建一個基本功能相同,但完全獨立的、全新的正則表達式實例;而Safari則會很干脆地返回作為參數(shù)的那個正則表達式實例。

        復(fù)制代碼 代碼如下:
        var r = /1/;
        document.write(new RegExp(r) == r); // Safari會輸出“true”,而其它瀏覽器輸出為“false”

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

        復(fù)制代碼 代碼如下:
        document.write(new RegExp(”)); // IE輸出“//”,其它瀏覽器輸出“/(?:)/”
        document.write(eval(” + new RegExp(”))) // IE輸出“undefined”,其它瀏覽器輸出“/(?:)/”

        5、如果把一個包含斜線“/”的正則表達式直接轉(zhuǎn)化成字符串――以“new RegExp(‘/’)”為例,只有Firefox和Opera會得到“///”,并且直接提取source屬性會得到“/”;而其它瀏覽器則會得到“///”,且直接提取source屬性會得到“/”。

        復(fù)制代碼 代碼如下:
        document.write(new RegExp(‘/’)); // Firefox和Opera輸出“///”,其它瀏覽器輸出“///”
        document.write(eval(” + new RegExp(‘/’))) // Firefox和Opera輸出“///”,其它瀏覽器輸出“undefined”

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

        復(fù)制代碼 代碼如下:
        document.write(/abc/n); // Chrome和Safari會輸出“/abc/”,其它瀏覽器中產(chǎn)生語法錯誤

        7、如果通過構(gòu)造器來創(chuàng)建正則表達式時,為其指定選項標(biāo)志的(第二個)字符串參數(shù)中包含了非有效標(biāo)志的字符,在Firefox中就會引起一個異常,而其它瀏覽器會將無效的部分忽略。

        復(fù)制代碼 代碼如下:
        document.write(new RegExp(‘1’, ‘n’)); // Firefox中會引起一個異常,提示無效的標(biāo)志;而其它瀏覽器會輸出“/1/”

        暫時就這些吧,發(fā)現(xiàn)新的再補上。
        來自:http://www.cnblogs.com/NanaLich

        贊(1)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 国产精品视频a播放| 99在线精品免费视频| 中文精品久久久久国产网址| 国内精品久久久久久不卡影院| xxx国产精品视频| 亚洲精品久久久www| 精品亚洲综合在线第一区| 久久国产精品免费一区| 2021国产精品成人免费视频| 亚洲综合av永久无码精品一区二区| 国产精品V亚洲精品V日韩精品| 国产成人精品男人的天堂538| 亚洲精品国产精品乱码在线观看| 久久er国产精品免费观看8| 精品一区二区久久| 最新国产成人精品2024| 国产精品一区二区av不卡| 精品一区二区三区中文字幕| 国产精品美女久久久久久2018| 亚洲av永久无码精品秋霞电影影院 | 国产在线精品一区二区夜色| 国产亚洲精品国产| 精品一区二区三区在线观看视频| 亚洲一区精品中文字幕| 热re99久久精品国99热| 亚洲综合无码精品一区二区三区| 国产精品青草久久久久婷婷| 精品不卡一区二区| 久久精品国产亚洲AV不卡| 国产精品成人无码久久久久久 | 久久精品成人免费看| 成人久久精品一区二区三区| 精品国产a∨无码一区二区三区 | 国产精品视频色视频| 国产午夜精品久久久久九九| 国产精品亚洲欧美大片在线看| 成人亚洲日韩精品免费视频| 国产精品片在线观看手机版| 国内精品久久久久影院网站| 久久伊人精品青青草原日本| 热综合一本伊人久久精品|