修饰符
- 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')
var reg = /xyz/i
2. 字符串上的正则方法调整
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719064145148.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUwMzUxMQ==,size_16,color_FFFFFF,t_70)
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 |
\ | | |
\ | | |
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719065210189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUwMzUxMQ==,size_16,color_FFFFFF,t_70)
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'))
console.log(/^\uD83D/u.test('\uD83D\uDC2A'))
console.log(/^.$/.test('\uD83D\uDC2A'))
console.log(/^.$/u.test('\uD83D\uDC2A'))
document.body.innerText = '\uD83D\uDC2A'
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719071115388.png)
s 让.能代表一切
.
不能代表的\n
\r
U2028(行分隔符) U2029(段分隔符)
console.log(/foo.bar/s.test('foo\nbar'))
console.log((/foo.bar/s).dotAll)
UTF_16
- Unicode分区定义,ASCII是Unicode的一部分
- 每个区存放2的16次方个(2字节,每个字节8位)U+0000 到 U+FFFF 第一个平面(BMP平面)
- 整个Unicode分为17个平面
- 特殊的汉字,2个字节表示不了时,用4个字节
- U+D800 到 U+FFFF没有对应的字符
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719070247938.png)
document.body.innerText = '\uD842\uDFB7'
document.body.innerText = '\uD866\uDF99'
'瀛'.charCodeAt(0)
(28699).toString(16)
document.body.innerText = '\u701b'
用码点显示emoji
emoji对照表
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719072005761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUwMzUxMQ==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719071945481.png)
(/\u{1F60D}/u).test('😍')
(/a{2}/).test('aa')