1.RegExp构造函数
ES5中有两种情况
let regex = new RegExp('xyz','i') // 等价于 let regex = /xyz/i let regex = new RegExp(/xyz/i) // 等价于 let regex = /xyz/i
注意!!!
let regex = new RegExp(/xyz/,'i') // 这种写法是错误的
ES6的改变
new RegExp(/abc/ig,'i').flags // 第二个参数i会将前面的ig进行覆盖
2.字符串的正则方法
let str="1 plus 2 equal 3" str.match(/\d+/g) // ['1','2','3']
let str = 'nihao Jack' str.replace(/Jack/,'Lucy') // nihao Lucy
- search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
let str = 'good body' str.search(/body/) // 5 let str = 'good body' str.search(/girl/) // -1
let str = 'good body' str.split('o') ["g","","d b","dy"]
3.u修饰符
- ES6 对正则表达式添加了u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。
4.RegExp.prototype.unicode 属性
- 正则实例对象新增unicode属性,表示是否设置了u修饰符
let str = /hello/; let str2 = /hello/u; str.unicode // false str2.unicode // true
5.y修饰符
- y修饰符,叫做“粘连”(sticky)修饰符。
- y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
let str = 'aaa_aa_a' let reg1 = /a+/g let reg2 = /a+/y reg1.exec(s) // ['aaa'] reg2.exec(s) // ['aaa'] reg1.exec(s) // ['aa'] reg2.exec(s) // null y修饰符从剩余项的第一个位置开始(即_)所以找不到 lastIndex属性可以指定每次搜索的开始位置 reg2.lastsIndex = 1 reg2.exec(s) // ['aa'] 实际上y修饰符号隐含了头部匹配的标志^
'a1a2a3'.match(/a\d/y) // ['a1'] 'a1a2a3'.match(/a\d/gy) // ['a1','a2','a3']
6.RegExp.prototype.sticky 属性
- 表示是否设置了y修饰符
7.RegExp.prototype.flags 属性
- 会返回正则表达式的修饰符
8.s 修饰符:dotAll 模式
9.后行断言
10.Unicode 属性类
11.具名组匹配
- 正则表达式使用圆括号进行组匹配
const REG = /(\d{4})-(\d{2})-(\d{2})/ const matchObj = REG.exec('1999-12-31') const year = matchObj[1]; // 1999 const month = matchObj[2]; // 12 const day = matchObj[3]; // 31
问题: 只能用数字序号引用,组的顺序改变,引用的时候就必须修改序号
const REG = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/ const matchObj = REG.exec('1999-12-31') const year = matchObj.groups.year // 1999 const month = matchObj.groups.month // 12 const day = matchObj.groups.day // 31 如果具名组没有匹配,那么对应的groups对象属性会是undefined
12.解构赋值和替换
- 有了具名组匹配以后,可以使用解构赋值直接从匹配结果上为变量赋值
let {groups: {one,two}} = /^(?<one>.*):(?<two>.*)$/u.exec('foo:bar') console.log({one,two}) // {one: 'foo',two: 'bar'}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。