国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Regex > 正文

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

2020-03-16 21:12:44
字體:
來源:轉載
供稿:網友
關于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) 
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的形式創建正則表達式時使用一個已有的正則表達式實例作為參數,那么大部分瀏覽器都會創建一個基本功能相同,但完全獨立的、全新的正則表達式實例;而Safari則會很干脆地返回作為參數的那個正則表達式實例。 
復制代碼代碼如下:

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

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

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

5、如果把一個包含斜線“/”的正則表達式直接轉化成字符串——以“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/”,其它瀏覽器中產生語法錯誤 

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 托克托县| 信丰县| 隆化县| 林州市| 仲巴县| 信丰县| 诸暨市| 垣曲县| 五台县| 甘谷县| 方城县| 黑水县| 藁城市| 黔东| 酉阳| 称多县| 神木县| 晋宁县| 苏州市| 固始县| 青河县| 阳江市| 林西县| 灵武市| 双峰县| 通化县| 自治县| 赣州市| 加查县| 沙湾县| 天峻县| 沙湾县| 高阳县| 大城县| 澜沧| 安乡县| 河曲县| 卫辉市| 雷山县| 浮梁县| 岐山县|