當我們學習正則表達式到一定程度的時候都會開始弄一些稍微有點復雜的東西,那么這時候我們就會學習到一些鮮為人知的JavaScript的正則表達式,接下來的內容中就讓錯新小編為大家詳細介紹一下吧。
現在我把正則表達式在五大主流瀏覽器(IE、Firefox、Chrome、Safari、Opera,以當前版本為準)之間的差異整理一下羅列出來,給大家,也算給我自己做一個備忘。
1、Firefox和Chrome會過度優化在循環(以及其中內嵌的函數定義)中創建的正則表達式,似乎它們在假設寫JavaScript的人會把正則表達式的構建和賦值寫錯地方。
2、如果你把一個有可能什么也不返回的函數作為第二個參數傳遞給replace方法,那么IE可能會直接刪除匹配的文本(在之前的測試中我總結的是Opera的行為比較獨特,現在看起來似乎是錯誤的結論),而其它瀏覽器則是會將匹配的文本替換成“undefined”。
?
?
3、如果使用new RegExp的形式創建正則表達式時使用一個已有的正則表達式實例作為參數,那么大部分瀏覽器都會創建一個基本功能相同,但完全獨立的、全新的正則表達式實例;而Safari則會很干脆地返回作為參數的那個正則表達式實例。
?
?
4、如果把一個“空”的正則表達式直接轉化成字符串,IE以外的瀏覽器都會得到“/(?:)/”,而IE會得到“//”——但從正則表達式上直接提取source屬性的時候,得到的都是空字符串。
?
?
5、如果把一個包含斜線“/”的正則表達式直接轉化成字符串——以“new RegExp('/')”為例,只有Firefox和Opera會得到“////”,并且直接提取source屬性會得到“//”;而其它瀏覽器則會得到“///”,且直接提取source屬性會得到“/”。
?
?
6、如果在使用字面表達式來定義一個正則表達式時,使用了無效的選項標志(例如“/abc/n”),則Chrome和Safari會完全忽視此無效選項標志(等同于“/abc/”),而在其它瀏覽器會導致語法錯誤。
?
?
7、如果通過構造器來創建正則表達式時,為其指定選項標志的(第二個)字符串參數中包含了非有效標志的字符,在Firefox中就會引起一個異常,而其它瀏覽器會將無效的部分忽略。
?
?
上文中小編介紹的鮮為人知的JavaScript的正則表達式你可能不知道,也有可能用不到,但是大家學習起來說不定哪天就會遭遇的幾個事實呢?
新聞熱點
疑難解答