正则表达式中的u、i、y修饰符

(4)预定义模式

u修饰符也影响到预定义模式,能否正确识别码点大于0xFFFF的Unicode字符。

/^S$/.test('') // false

/^S$/u.test('') // true

上面代码的S是预定义模式,匹配所有不是空格的字符。只有加了u修饰符,它才能正确匹配码点大于0xFFFF的Unicode字符。利用这一点,可以写出一个正确返回字符串长度的函数。

function codePointLength(text) {
  var result = text.match(/[sS]/gu);
  return result ? result.length : 0;
}

var s = '';

s.length // 4

codePointLength(s) // 2

(5)i修饰符

有些Unicode字符的编码不同,但是字型很相近,比如,

u004B与u212A都是大写的K。

/[a-z]/i.test('u212A') // false

/[a-z]/iu.test('u212A') // true

上面代码中,不加u修饰符,就无法识别非规范的K字符。

y修饰符

除了u修饰符,ES6还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。

pdf 文件大小:2.13MB