修飾符
- m multiLine 對于str中含\n的情況
- g global
- i ignoreCase
元字元
- 反斜杠加轉義
元字元 | 含義 | 簡寫 |
---|---|---|
\w | 比對字母、數字、下劃線。等價于’[A-Za-z0-9_]’。 | word |
\W | 比對非字母、數字、下劃線。等價于 ‘[^A-Za-z0-9_]’。 | |
\s | 比對任何空白字元,包括空格、制表符、換頁符等等。等價于 [ \f\n\r\t\v]。 | space |
\S | 比對任何非空白字元。等價于 [^ \f\n\r\t\v]。 | |
[\w\W] | 所有字元 | |
\d | 比對一個數字字元。等價于 [0-9]。 | digit |
\D | 比對一個非數字字元。等價于 [^0-9]。 | |
\b | 比對一個單詞邊界,也就是指單詞和空格間的位置。 | bridge border |
\B | 比對非單詞邊界。 | |
ES6新增部分
1. 聲明正則的變化方式
var reg = new RegExp('xyz', i)
// 也可以 修飾符以第二個參數為準
var reg = new RegExp(/xyz/, 'i')
// 等價于ES5
var reg = /xyz/i
2. 字元串上的正則方法調整
// ES6,當調用字元串方法match時,本質上調用的是RegExp原型上的[Symbol.match]
String.prototype.match → RegExp.prototype[Symbol.match]
String.prototype.replace → RegExp.prototype[Symbol.replace]
String.prototype.search → RegExp.prototype[Symbol.search]
String.prototype.split → RegExp.prototype[Symbol.split]
3. 新增的修飾符u y s
修飾符 | 含義 | 簡寫 |
---|---|---|
\y | 再次比對的時候看是否粘粘的,是全局的 | sticky |
\u | 識别D800以後的4位元組文字,會将4位元組看做1個字來比對 | unicode |
\ | ||
\ |
y
<script>
(function () {
const str = "aaa_aa_a";
const reg2 = /a+/y
console.log(reg2.exec(str))
console.log(reg2.exec(str))
console.log(reg2.exec(str))
console.log(reg2.exec(str))
})();
</script>
<script>
(function () {
console.log('--------------腳本2-----------------')
const str = "aaa_aa_a";
const reg1 = /a+/g
console.log(reg1.exec(str))
console.log(reg1.exec(str))
console.log(reg1.exec(str))
console.log(reg1.exec(str))
})();
</script>
u
console.log(/^\uD83D/.test('\uD83D\uDC2A')) // true
console.log(/^\uD83D/u.test('\uD83D\uDC2A')) // false
console.log(/^.$/.test('\uD83D\uDC2A')) // false .也比對不到
console.log(/^.$/u.test('\uD83D\uDC2A')) // true
document.body.innerText = '\uD83D\uDC2A'
s 讓.能代表一切
.
不能代表的
\n
\r
U2028(行分隔符) U2029(段分隔符)
console.log(/foo.bar/s.test('foo\nbar')) // true
console.log((/foo.bar/s).dotAll)// true
UTF_16
- Unicode分區定義,ASCII是Unicode的一部分
- 每個區存放2的16次方個(2位元組,每個位元組8位)U+0000 到 U+FFFF 第一個平面(BMP平面)
- 整個Unicode分為17個平面
- 特殊的漢字,2個位元組表示不了時,用4個位元組
- U+D800 到 U+FFFF沒有對應的字元
// 一定要大于D800
document.body.innerText = '\uD842\uDFB7' // 𠮷
document.body.innerText = '\uD866\uDF99' // 𩮙
'瀛'.charCodeAt(0) // 28699
(28699).toString(16) // "701b"
document.body.innerText = '\u701b' // 瀛
用碼點顯示emoji
emoji對照表
(/\u{1F60D}/u).test('😍') // true
(/a{2}/).test('aa') // true 這裡的{}表示量詞