一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - 正則表達(dá)式 - 正則表達(dá)式字面量在ECMAScript5中的變化

正則表達(dá)式字面量在ECMAScript5中的變化

2020-08-03 17:40正則之家 正則表達(dá)式

也就是說(shuō)在ECMAScript3規(guī)范中,用正則表達(dá)式創(chuàng)建的RegExp對(duì)象會(huì)共享同一個(gè)實(shí)例,而在ECMAScript5中則是兩個(gè)獨(dú)立的實(shí)例

在《JavaScript語(yǔ)言精粹》的第72頁(yè)有這樣一段:

用正則表達(dá)式字面量創(chuàng)建的RegExp對(duì)象來(lái)共享同一個(gè)單實(shí)例:

復(fù)制代碼 代碼如下:


function make_a_matcher( ) {
return /a/gi;
}
var x = make_a_matcher( );
var y = make_a_matcher( );

// 注意:x 和 y 是同一個(gè)對(duì)象!

x.lastIndex = 10;

document.writeln(y.lastIndex); // 10當(dāng)你在瀏覽器中運(yùn)行這段代碼時(shí),你會(huì)發(fā)現(xiàn)IE6-IE9、FireFox4、Chrome10、Safari5輸出都是0,F(xiàn)irefox 3.6.16輸出是10,原因可以在ECMAScript5規(guī)范第24頁(yè)和第247頁(yè)找到:



A regular expression literal is an input element that is converted to a RegExp object (see 15.10) each time the literal is evaluated. Two regular expression literals in a program evaluate to regular expression objects that never compare as === to each other even if the two literals' contents are identical. A RegExp object may also be created at runtime by new RegExp (see 15.10.4) or calling the RegExp constructor as a function (15.10.3).

7.8.5: Regular expression literals now return a unique object each time the literal is evaluated. This change is detectable by any programs that test the object identity of such literal values or that are sensitive to the shared side effects.

也就是說(shuō)在ECMAScript3規(guī)范中,用正則表達(dá)式創(chuàng)建的RegExp對(duì)象會(huì)共享同一個(gè)實(shí)例,而在ECMAScript5中則是兩個(gè)獨(dú)立的實(shí)例。《JavaScript語(yǔ)言精粹》出版時(shí)ECMAScript5還沒有發(fā)布,在這個(gè)問(wèn)題上書和ECMAScript3標(biāo)準(zhǔn)保持了一致。FireFox3.6遵循了ECMAScript3標(biāo)準(zhǔn),所以結(jié)果與書中一致,而最新的Firefox4、Chrome和Safari5都遵循ECMAScript5標(biāo)準(zhǔn),至于IE6-IE8都沒有很好的遵循ECMAScript3標(biāo)準(zhǔn),不過(guò)在這個(gè)問(wèn)題上反而處理對(duì)了。很明顯ECMAScript5的規(guī)范更符合開發(fā)者的期望,那就是相同的正則表達(dá)式字面量創(chuàng)建獨(dú)立的RegExp對(duì)象會(huì)有不同的lastIndex,才方便分別處理。

在ECMAScript5規(guī)范的第247頁(yè)還有兩條來(lái)說(shuō)明ECMAScript5和ECMAScript3在正則表達(dá)式字面量上的改變:

7.8.5: Edition 5 requires early reporting of any possible RegExp constructor errors that would be produced when converting a RegularExpressionLiteral to a RegExp object. Prior to Edition 5 implementations were permitted to defer the reporting of such errors until the actual execution time creation of the object.
7.8.5: In Edition 5 unescaped “/” characters may appear as a CharacterClass in a regular expression literal. In Edition 3 such a character would have been interpreted as the final character of the literal.

第1個(gè)是在ECMAScript5中正則表達(dá)式字面量轉(zhuǎn)化為RegExp對(duì)象時(shí),任何RegExp構(gòu)造器的錯(cuò)誤都會(huì)盡早報(bào)告,而在之前的規(guī)范中是只有對(duì)象創(chuàng)建真正執(zhí)行時(shí)才會(huì)報(bào)錯(cuò)。

第2個(gè)是說(shuō)在ECMAScript5的正則表達(dá)式字面量中,未轉(zhuǎn)義的正斜杠“/”可以直接用在正則表達(dá)式字符類中。而在ECMAScript3中它只能作為正則表達(dá)式字面量的開始和結(jié)束字符。從IE6-IE9、Firefox3.6-Firefox4.0、Chrome和Safari都可以直接把未轉(zhuǎn)義的正斜杠“/”用在正則表達(dá)式字符類中。如:

復(fù)制代碼 代碼如下:


var my_regexp = /([8/5+4]*).{3}/g;
var str = '8/5+4 is what!';

var result = my_regexp.exec(str); // the same in IE6-9,FF3.6-4.0,Chrome,Safari

for(var i = 0,n = result.length; i < n; ++i){
document.writeln(result[i]);
}
result[0] = 8/5+4 is
result[1] = 8/5+4


在《JavaScript語(yǔ)言精粹》第76頁(yè)也指明在正則表達(dá)式的字符類中使用正斜杠“/”需要轉(zhuǎn)義,也是基于ECMAScript3規(guī)范。由于正則表達(dá)式中需要轉(zhuǎn)義的特殊字符比較多,當(dāng)心存疑慮時(shí)對(duì)任何特殊字符都可以使用反斜杠“\”來(lái)使其字面化確保安全,不過(guò)這個(gè)規(guī)則不適宜字母和數(shù)字。

正則表達(dá)式字面量從ECMAScript3到ECMAScript5的改變也蠻符合HTML5設(shè)計(jì)原理中提到的2條。一條是“一旦遇到?jīng)_突,最終用戶優(yōu)先,其次是作者,其次是實(shí)現(xiàn)者,其次標(biāo)準(zhǔn)制定者,最后才是理論上的完滿”,另一條是“支持已有內(nèi)容”。

最后推薦一下XRegExp,它是一個(gè)非常優(yōu)秀的正則表達(dá)式JavaScript庫(kù),兼容多個(gè)主流瀏覽器、ECMAScript3和ECMAScript5。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 被夫上司强迫中文 | 日韩免费毛片视频杨思敏 | 四虎影视4hu最新地址在线884 | 欧美激烈精交gif动态图18p | 韩国最新理论三级在线观看 | 睡男神的这件小事小说在线阅读 | 美女视频在线观看视频 | 国产梦呦精品 | 国产日韩在线 | 福利姬 magnet | 午夜影院一区二区三区 | 欧美亚洲一区二区三区 | 日韩一卡2卡3卡新区网站 | 亚洲成人贴图 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 娇妻被又大又粗又长又硬好爽 | 无码乱人伦一区二区亚洲一 | 国产福利资源网在线观看 | 性派对videos18party | 秋葵丝瓜茄子草莓榴莲樱桃 | 波多野结衣两女调教 | 成人久久伊人精品伊人 | 国产精品天天在线 | 亚洲3dxxxx动漫xxx| 精品久久成人免费第三区 | 2022天堂岛日产 | 情侣奴伺候女王第2部分小说 | 亚洲一区二区三区福利在线 | 欧美一区二区三区精品 | 嫩草成人影院 | 国产高清视频网站 | 奇米影视在线视频 | 欧美日韩中文字幕在线视频 | 日本人妖在线 | 天美传媒tm0065 | 国产99视频精品免费视频7 | 久久免费看少妇级毛片蜜臀 | 亚洲欧美7777 | 98精品全国免费观看视频 | 久久精品热在线观看85 | 亚洲精品中文字幕在线 |