js php 正则差别,JavaScript正则表达式的浏览器的差异
JavaScript中的正則表達(dá)式在不同的瀏覽器中得到的結(jié)果可能會(huì)有差異,下面把正則表達(dá)式在五大主流瀏覽器(IE、Firefox、Chrome、Safari、Opera,以當(dāng)前版本為準(zhǔn))之間的差異整理一下羅列出來(lái)。
1. Firefox和Chrome會(huì)過(guò)度優(yōu)化在循環(huán)(以及其中內(nèi)嵌的函數(shù)定義)中創(chuàng)建的正則表達(dá)式,似乎它們?cè)诩僭O(shè)寫JavaScript的人會(huì)把正則表達(dá)式的構(gòu)建和賦值寫錯(cuò)地方。var r;
for(var i = 0; i < 2; i++){
var x = /abc/g;
if(r)
// 第二個(gè)循環(huán)時(shí)Firefox和Chrome會(huì)輸出“true”
document.write(r == x);
else
r = x;
}
2. 如果你把一個(gè)有可能什么也不返回的函數(shù)作為第二個(gè)參數(shù)傳遞給replace方法,那么IE可能會(huì)直接刪除匹配的文本(在之前的測(cè)試中我總結(jié)的是Opera的行為比較獨(dú)特,現(xiàn)在看起來(lái)似乎是錯(cuò)誤的結(jié)論),而其它瀏覽器則是會(huì)將匹配的文本替換成“undefined”。// IE會(huì)輸出“13”,而其它瀏覽器輸出“1undefined3”
document.write('123'.replace(/2/, function(){}));
3. 如果使用new RegExp的形式創(chuàng)建正則表達(dá)式時(shí)使用一個(gè)已有的正則表達(dá)式實(shí)例作為參數(shù),那么大部分瀏覽器都會(huì)創(chuàng)建一個(gè)基本功能相同,但完全獨(dú)立的、全新的正則表達(dá)式實(shí)例;而Safari則會(huì)很干脆地返回作為參數(shù)的那個(gè)正則表達(dá)式實(shí)例。var r = /1/;
// Safari會(huì)輸出“true”,而其它瀏覽器輸出為“false”
document.write(new RegExp(r) == r);
4. 如果把一個(gè)“空”的正則表達(dá)式直接轉(zhuǎn)化成字符串,IE以外的瀏覽器都會(huì)得到“/(?:)/”,而IE會(huì)得到“//”——但從正則表達(dá)式上直接提取source屬性的時(shí)候,得到的都是空字符串。// IE輸出“//”,其它瀏覽器輸出“/(?:)/”
document.write(new RegExp(''));
// IE輸出“undefined”,其它瀏覽器輸出“/(?:)/”
document.write(eval('' + new RegExp('')))
5. 如果把一個(gè)包含斜線“/”的正則表達(dá)式直接轉(zhuǎn)化成字符串——以“new RegExp('/')”為例,只有Firefox和Opera會(huì)得到“/\//”,并且直接提取source屬性會(huì)得到“\/”;而其它瀏覽器則會(huì)得到“///”,且直接提取source屬性會(huì)得到“/”。// Firefox和Opera輸出“/\//”,其它瀏覽器輸出“///”
document.write(new RegExp('/'));
// Firefox和Opera輸出“/\//”,其它瀏覽器輸出“undefined”
document.write(eval('' + new RegExp('/')))
6. 如果在使用字面表達(dá)式來(lái)定義一個(gè)正則表達(dá)式時(shí),使用了無(wú)效的選項(xiàng)標(biāo)志(例如“/abc/n”),則Chrome和Safari會(huì)完全忽視此無(wú)效選項(xiàng)標(biāo)志(等同于“/abc/”),而在其它瀏覽器會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。// Chrome和Safari會(huì)輸出“/abc/”,其它瀏覽器中產(chǎn)生語(yǔ)法錯(cuò)誤
document.write(/abc/n);
7. 如果通過(guò)構(gòu)造器來(lái)創(chuàng)建正則表達(dá)式時(shí),為其指定選項(xiàng)標(biāo)志的(第二個(gè))字符串參數(shù)中包含了非有效標(biāo)志的字符,在Firefox中就會(huì)引起一個(gè)異常,而其它瀏覽器會(huì)將無(wú)效的部分忽略。// Firefox中會(huì)引起一個(gè)異常,提示無(wú)效的標(biāo)志;而其它瀏覽器會(huì)輸出“/1/
document.write(new RegExp('1', 'n')); ”
以上就是JavaScript正則表達(dá)式的瀏覽器的差異 的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的js php 正则差别,JavaScript正则表达式的浏览器的差异的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php自定义弹窗,自定义弹窗Style样
- 下一篇: php代码清除空格注解,PHP文件去掉P