ES6正則表達式的一些新功能總結
本文主要總結了ES6正則表達式的一些新功能,分享出來供大家參考學習,下面來看看詳細的介紹:
一、構造函數實例化參數的變化
大家都知道,在ES5中,new RegExp(參數1,參數2),參數1若是指定了正則修飾符,則參數2就不應該出現,否則將會報錯,在ES6中,第二個參數的正則修飾符會覆蓋掉原有的修飾符:
<script> //在ES5中,下面的正則自帶修飾符ig,則第二個參數不能出現 var reg = new RegExp(/asd/ig); //在ES6中,如下: var reg = new RegExp(/asd/ig,'i'); //i會覆蓋掉原來的ig </script>
二、u修飾符
u修飾符可以自動識別碼點大于0xFFFF的編碼。只是ES6的新增內容!
<script>
/\uD83D/u.test("\uD83D\uDC2A");
//在ES6中會返回false,u修飾符默認處理的UTF-16編碼
/\uD83D/.test("\uD83D\uDC2A");
//在ES5中會將test的的參數拆分成兩個字符,返回true
</script>
另外使用u修飾符需要注意一下幾點:
1. “.”字符
在正則表達式中,.字符的含義是除了換行符以外的所有字符,如要.字符匹配碼點大于\uFFFF的字符,必須帶u修飾符,否則不能正常識別;
<svcipt> var s = "��"; //在ES5中 /^.$/.test(s)//false //在ES6中 /^.$/u.test(s)//true </script>
2.Unicode字符表示法
ES6中新增使用了大括號表示Unicode字符,這種方法在正則表達式中必須加上u修飾符才能識別。
<svcipt>
//在ES5中,61會被當做量詞使用
/\u{61}/.test("a")//false
//在ES6中
/\u{61}/u.test("a")//true
</script>
3.預定義模式
u修飾符也影響到預定義模式,加了u修飾符,才能正確識別碼點大于0xFFFF的Unicode字符。
4.對i修飾符的影響
有些Unicode編碼的字符比較接近,比如大寫的K的編碼有\(zhòng)u004B和\u212A,
<svcipt>
//未添加u修飾
/[a-z]/.test("\u212A")//false
//添加u修飾
/[a-z]/iu.test("\u212A")//true
</script>
三、y修飾符
ES6還新增了一個y修飾符,與通常的g修飾符用法類似,都是用來全局匹配,不同的是y修飾符又叫做“粘連”修飾符,在上一次匹配成功的下一個位置開始匹配,但是下一次開始位置必須要能夠滿足匹配,也就是匹配從剩余的第一個位置開始,這就是“粘連”的含義(個人理解)吧。
舉個例子吧!
<svcipt> var s = qqqq_q_qq; var r1 = /q+/g; var r2 = /q+/y //第一次匹配 r1.exec(s)//["qqqq"] r2.exec(s)//["qqqq"] //第二次匹配 r1.exec(s)//["qqq"] r2.exec(s)//null </script>
注意:y修飾符隱含了頭部匹配的標志^
/a/.exec("bdab");//null
/a/.exec("abbd");//["a"]
開頭必須匹配上
四、新增屬性
1.sticky屬性
判斷正則是否設置了y修飾符。
返回布爾值。
2.flags屬性
返回正則的修飾符
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
bootstrap折疊調用collapse()后data-parent不生效的快速解決辦法
今天做的項目,用到了bootstrap的折疊功能,這個功能需要只展開一個折疊框,點擊一個就會自動隱藏另一個,實現起來也很容易,但是在測試時同事提出了一個bug,怎么解決呢?今天小編通過本教程給大家分享下2017-02-02
TypeScript?使用?Tuple?Union?聲明函數重載
這篇文章主要介紹了TypeScript?使用?Tuple?Union?聲明函數重載,TypeScript 中為函數添加多個簽名后,依然需要添加相應的代碼來判斷并從不同的簽名參數列表中獲取對應的參數,下文就來探索方法和技巧吧2022-04-04

