濮阳杆衣贸易有限公司

主頁 > 知識庫 > 你不一定知道的關于JavaScript的正則表達式

你不一定知道的關于JavaScript的正則表達式

熱門標簽:哈爾濱公司外呼系統(tǒng)代理 遼寧秒客來電話機器人 淄博市張店區(qū)地圖標注 山東外呼系統(tǒng)聯(lián)系方式 自己做的電銷機器人 上海銷售電銷機器人軟件 地圖標注店鋪地圖標注酒店 浙江營銷外呼系統(tǒng)有哪些 惠安地圖標注
這兩天在用正則表達式搞一個稍微有點復雜的東西,但是不同瀏覽器之間的差異可浪費了我不少的人參。

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

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

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”。
復制代碼 代碼如下:

document.write('123'.replace(/2/, function(){})); // IE會輸出“13”,而其它瀏覽器輸出“1undefined3”

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

var r = /1/;
document.write(new RegExp(r) == r); // Safari會輸出“true”,而其它瀏覽器輸出為“false”

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

document.write(new RegExp('')); // IE輸出“//”,其它瀏覽器輸出“/(?:)/”
document.write(eval('' + new RegExp(''))) // IE輸出“undefined”,其它瀏覽器輸出“/(?:)/”

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

document.write(new RegExp('/')); // Firefox和Opera輸出“/\//”,其它瀏覽器輸出“///”
document.write(eval('' + new RegExp('/'))) // Firefox和Opera輸出“/\//”,其它瀏覽器輸出“undefined”

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

document.write(/abc/n); // Chrome和Safari會輸出“/abc/”,其它瀏覽器中產(chǎn)生語法錯誤

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

document.write(new RegExp('1', 'n')); // Firefox中會引起一個異常,提示無效的標志;而其它瀏覽器會輸出“/1/”

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

標簽:西安 綿陽 銅川 無錫 重慶 泰州 長沙 宣城

巨人網(wǎng)絡通訊聲明:本文標題《你不一定知道的關于JavaScript的正則表達式》,本文關鍵詞  你,不一定,知道,的,關于,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《你不一定知道的關于JavaScript的正則表達式》相關的同類信息!
  • 本頁收集關于你不一定知道的關于JavaScript的正則表達式的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    元谋县| 白银市| 锡林浩特市| 惠来县| 伊春市| 弥渡县| 德清县| 体育| 常山县| 香格里拉县| 上林县| 乌苏市| 孙吴县| 岐山县| 肥西县| 罗平县| 石泉县| 隆化县| 宝应县| 义乌市| 呼伦贝尔市| 铜山县| 宜城市| 大关县| 红原县| 晋宁县| 彭山县| 湖南省| 吉安市| 锡林郭勒盟| 麟游县| 乐至县| 东丽区| 壤塘县| 库伦旗| 兴安县| 镇雄县| 天全县| 丽江市| 汨罗市| 湖南省|