1、怎么声明一个正则
答:可通过下面几种方式进行声明
var r1 = new RegExp(/xyz/ig) // 正则为xyz 修饰符为 ig
var r2 = new RegExp(‘xyz’, ‘ig’) // 正则为xyz 修饰符为 ig
var r3 = new RegExp(/xyz/i, ‘g’) // 正则为xyz 修饰符为 g,覆盖了修饰符 i
var r4 = /xyz/ig // 正则为xyz 修饰符为 ig
2、怎么获取一个正则的修饰符
答:使用flags属性进行获取 :reg.flags
3、字符串有哪些方法是用了正则的
答:replace match split search replaceAll
4、正则的u修饰符有什么作用
答:可以有效处理码点值超过 \uffff的字符,即四个字节存储的UTF-16编码的字符
5、怎么判断一个正则有没有带 u修饰符
答:使用 unicode属性进行判断,例如
var reg1 = /aaa/u, reg2 = /asd/ ;
reg1.unicode // true
reg1.flags.includes(‘u’) // true
reg2.unicode // false
6、正则的y修饰符和g修饰符有什么区别
答:y和g修饰符都是全局进行查找
g修饰符每次都是从剩余位置中进行查找
y修饰符每次都是从剩余位置的第一个位置进行查找
例如:
var str = ‘aaa_aa_a’
var reg1 = /a+/g
var reg2 = /a+/y
reg1.exec(str) // 第一次返回 [‘aaa’] 第二次返回 [‘aa’] 第三次返回 [‘b’]
reg2.exec(str) // 第一次返回 [‘aaa’] 第二次从剩余字符串的 '_aa_a’的第一个位置进行匹配,返回null
7、怎么判断一个正则是否带有 y修饰符
答:使用sticky属性进行判断
var reg = /xyz/iguy
reg.sticky // true
reg.flags.includes(‘y’) // true
8、怎么获取正则的正文
答:使用 source属性进行获取
var reg = /asdf/ig
reg.source // ‘asdf’
9、正则的点字符(.)是否可以匹配任意单个字符
答:不能,例如 换行符 回车符 行分隔符 段分隔符就不能让 点字符进行匹配
ES6中增加了 s修饰符,以便 点字符可以匹配所有的字符
/a.b/.test(‘a\nb’) // false
/a.b/s.test(‘a\nb’) // true
10、ES6的先行断言是什么?
答:先行断行指的是:x只有在y前面才匹配,必须写成 /x(?=y)/ 的形式
11、ES6的先行否定断言是什么
答:先行否定断言指的是:x只有不在y前面才匹配,必须写成 /x(?!y)/的形式
12、ES6的后行断言是什么?
答:后行断言指的是:x只有在y后面才匹配,必须写成 /(?<=y)x/ 的形式
13、ES6的后行否定断言是什么?
答:后行否定断言:x只有不在y后面才匹配,必须写成 /(?<!y)x/ 的形式
14、ES6正则的具名组匹配是什么?
答:正则表达式当中,使用圆括号进行每个组的匹配,
并为每个组取个名字,形式为:/(?<变量名>正则字符)/
例如:
var reg = /(?a+)(<?bName>bbb)/
var res = reg.exec(‘aaaabbbb’)
res.groups.aName //‘aaaa’
res.groups.bName //‘bbb’
搭配解构赋值一起使用
let {groups: {aName, bName}} = res