模式修正符
/i (忽略大小写)
/g (全文查找出现的所有匹配字符)
/m (多行查找)/gi(全文查找、忽略大小写)
/ig(全文查找、忽略大小写)
/u (es6新增ES6对正则表达式添加了u 修饰符,含义为“Unicode模式”,用来正确处理大于 \uFFFF的Unicode字符。也就是说,会正确处理四个字节的UTF-16编码。)
/y (新增,y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义)
对于码点大于0xFFFF 的Unicode字符,点字符不能识别,必须加上u修饰符
var s = '𠮷';
/^.$/.test(s) // false
/^.$/u.test(s) // true
Unicode字符表示法
如果不加u 修饰符,正则表达式无法识别\u{61} 这种表示法,只会认为这匹配61个连续u
/\u{61}/.test('a') // false
/\u{61}/u.test('a') // true
/\u{20BB7}/u.test('𠮷') // true
/a{2}/.test('aa') // true
/a{2}/u.test('aa') // true
/𠮷{2}/.test('𠮷𠮷') // false
/𠮷{2}/u.test('𠮷𠮷') // true
实用的小例子,返回字符串的真实长度
function codePointLength(text) {
var result = text.match(/[\s\S]/gu);
return result ? result.length : 0;
}
var s = '𠮷𠮷';
s.length //4
codePointLength(s) // 2
// 没有找到匹配
'x##'.split(/#/y)
// [ 'x##' ]
// 找到两个匹配
'##x'.split(/#/y)
// [ '', '', 'x' ]