ES6正则扩展

修饰符

ES6对正则对象添加了几个新的修饰符,比如u,s,y,这三个是比较常用的修饰符

u修饰符用来正确处理大于\uFFFF的 Unicode 字符

/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('𠮷') // true

y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义

const REGEX = /a/gy;
'aaxa'.replace(REGEX, '-') // '--xa'

正则表达式中,点(.)是一个特殊字符,代表任意的单个字符,但是行终止符除外。s修饰符,使得(.)可以匹配任意单个字符

/foo.bar/s.test('foo\nbar') // true

 

具名组匹配

现在有一个“具名组匹配”(Named Capture Groups)的提案,允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用

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

 

引用

如果要在正则表达式内部引用某个“具名组匹配”,可以使用\k<组名>的写法。

const RE_TWICE = /^(?<word>[a-z]+)!\k<word>$/;
RE_TWICE.test('abc!abc') // true
RE_TWICE.test('abc!ab') // false

 

posted @ 2017-09-21 15:27  向着太阳生  阅读(134)  评论(0)    收藏  举报