正则的扩展
-
u修饰符 支持unicode字符匹配
- .字符能匹配unicode字符
- unicode字符表示法\u{}
- 量词能准确匹配双字符unicode字符数量
- \S等预设字符集包含unicode字符
- i修饰符能匹配字形相近unicode字符
- \p{} \P{} 可以匹配指定unicode字符集
-
y修饰符 全局头部匹配
-
s修饰符 .字符增加匹配换行符
-
RegRex原型属性
- RegExp.prototype.unicode 是否设置u修饰符
- RegExp.prototype.sticky 是否设置y修饰符
- RegExp.prototype.dotAll 是否设置s修饰符
- RegExp.prototype.flags 返回所有设置的修饰符
-
环视
/x(?=y)/.exec('xxyy') //正向肯定环视 [x,index:1] /x(?!y)/.exec('xxyy') //正向否定环视 [x,index:0] /(?<=x)y/.exec('xxyy') //逆向肯定环视 [y,index:2] /(?<!x)y/.exec('xxyy') //逆向否定环视 [y,index:3] 'xxyyy'.replace(/(?<=y)y/g,'x') //匹配以原始串匹配,环视可以在当前起始位置之前 xxyxx /(?<=(\d+)(\d+))$/.exec('1053') // ["", "1", "053"] // 逆向环视+字符自右向左贪婪 /^(\d+)(\d+)$/.exec('1053') // ["1053", "105", "3"] // 普通匹配+字符自左向右贪婪 /(?<=(o)d\1)r/.exec('hodor') // null /(?<=\1d(o))r/.exec('hodor') // ["r", "o"] //反向引用在匹配字符之前
-
具名组匹配
(?<name>regrex)
const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/ const matchObj = RE_DATE.exec('1999-12-31') const year = matchObj.groups.year // 1999 const month = matchObj.groups.month // 12 const day = matchObj.groups.day // 31 replace(/(?<name>x)y\k<name>/,'$<name>') // 反向引用具名组匹配 \k<name> $<name>
tips
- .字符匹配所有字符需要us修饰符
/^.{2}$/.test('𠮷\n') // false /^.{2}$/u.test('𠮷\n') // false /^.{2}$/s.test('𠮷\n') // false /^.{2}$/us.test('𠮷\n') // true
- regrex括号整理
/(x)/ //组匹配 /(?:x)/ //非组匹配 /(?<name>x)/ //具名组匹配 /x(?=y)/ // 正向肯定环视 /x(?!y)/ // 正向否定环视 /(?<=x)y/ // 逆向肯定环视 /(?<!x)y/ // 逆向否定环视
网友评论