es6-3 正则扩展
Posted helzeo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6-3 正则扩展相关的知识,希望对你有一定的参考价值。
在 es5 中正则使用, 要么是两个参数, 要么是一个正则表达式参数
{ let regex = new RegExp(‘xyz‘, ‘i‘); // i 表述忽略大小写 let regex2 = new RegExp(/xyz/i); // 正则表达式参数 console.log(regex.test(‘xyz123‘)) // true console.log(regex2.test(‘xyz123‘)) // true }
es6 中允许使用两个参数, 但是后边参数的修饰符会覆盖前边的正则修饰符, 可通过 es6 新增加的 flags 属性来获取正则对象修饰符
{ let regex3 = new RegExp(/xyz/ig, ‘g‘) console.log(regex3.test(‘xyz123‘)) // true console.log(regex3.flags) // 修饰符是后边的 i }
es6 中的 y 和 u 正则修饰符
g 和 y 都是全局匹配
g 修饰符是从上一次匹配的位置继续寻找, 直到找到匹配的位置开始, 不强调必须是第一个就得匹配上, 中间任何位置匹配上都算
y 修饰符匹配的第一个必须是紧跟着的下一个字符开始匹配, 由于匹配完 bbb 后是 _ 所以不匹配了
{ let s = ‘bbb_bb_b‘; let a1 = /b+/g; let a2 = /b+/y; console.log(‘one‘, a1.exec(s), a2.exec(s)); /* ["bbb", index: 0, input: "bbb_bb_b", groups: undefined] ["bbb", index: 0, input: "bbb_bb_b", groups: undefined] */ console.log(‘two‘, a1.exec(s), a2.exec(s)); /* ["bb", index: 4, input: "bbb_bb_b", groups: undefined] null */ // sticky 属性用来检测是否使用了 y 修饰符 console.log(a1.sticky, a2.sticky) // false true }
u 修饰符是 Unicode 简称
{ console.log(‘u-1‘, /^uD83D/.test(‘uD83DuDC2A‘)); // true console.log(‘u-2‘, /^uD83D/u.test(‘uD83DuDC2A‘)); // false // {} 括号中如果使用的 Unicode 编码的话必须加上 u 修饰符才能匹配成功 [a 在 Unicode 编码对应的是 61] console.log(/u{61}/.test(‘a‘)); // false console.log(/u{61}/u.test(‘a‘)); // true console.log(`u{20BB7}`); // 五位数大于两个字节了 ?? let s = ‘??‘ console.log(‘u‘, /^.$/.test(s)); // false .表述所有并没有成功匹配到字符 console.log(‘u‘, /^.$/u.test(s)); // false .表述所有并没有成功匹配到字符 // 总结: 如果字符串中有的字符是大于两个字节的, 一定要加上 u 修饰符才能正确的去识别 console.log(‘test-1‘, /??{2}/.test(‘????‘)); // false console.log(‘test-2‘, /??{2}/u.test(‘????‘)); // true // 如果你处理的正则表示中有大于两个字节的字符, 必须要加修饰符 u // .并不能匹配到所有字符, 只能匹配两个字节以内的所有字符 }
以上是关于es6-3 正则扩展的主要内容,如果未能解决你的问题,请参考以下文章
getSupportFragmentManager() 在活动扩展片段中未定义
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性