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

首頁 > 編程 > Regex > 正文

鮮為人知的JavaScript的正則表達式

2024-09-07 17:40:12
字體:
供稿:網(wǎng)友

當(dāng)我們學(xué)習(xí)正則表達式到一定程度的時候都會開始弄一些稍微有點復(fù)雜的東西,那么這時候我們就會學(xué)習(xí)到一些鮮為人知的JavaScript的正則表達式,接下來的內(nèi)容中就讓錯新小編為大家詳細介紹一下吧。

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

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

?

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/”),而在其它瀏覽器會導(dǎo)致語法錯誤。

?

?

?


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


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

?

?

?


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

上文中小編介紹的鮮為人知的JavaScript的正則表達式你可能不知道,也有可能用不到,但是大家學(xué)習(xí)起來說不定哪天就會遭遇的幾個事實呢?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 八宿县| 永和县| 大宁县| 都江堰市| 靖州| 睢宁县| 石景山区| 东台市| 昂仁县| 翁牛特旗| 拉萨市| 瓦房店市| 潮州市| 左贡县| 会东县| 安岳县| 辰溪县| 凤台县| 洮南市| 浪卡子县| 祥云县| 霍邱县| 定日县| 中卫市| 松阳县| 会宁县| 鱼台县| 南江县| 怀柔区| 太谷县| 蚌埠市| 尉氏县| 眉山市| 四会市| 潢川县| 九台市| 阳高县| 南丰县| 开远市| 天柱县| 洛浦县|