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('\uD83D\uDC2A')); // true
    console.log('u-2', /^\uD83D/u.test('\uD83D\uDC2A')); // 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 常用字符串属性

{
    let str = 'string'

    // es6 检查字符串是否包含指定字符
    console.log(str.includes('s')); // true

    // es6 判断是否以某些字符串为起始
    console.log(str.startsWith('str')); // true 判断是否以 str 为起始

    // es6 判断是否以某些字符串为结束
    console.log(str.endsWith('str')); // false 判断是否以 str 为结束

    // es6 复制字符串次数
    console.log(str.repeat(2)); // stringstring

    // 模板字符串
    let name = '小明';
    let info = '小男孩';
    let m = `i am ${name}, i am ${info}`
    console.log(m); // i am 小明, i am 小男孩

    // es6 要求长度不够补全
    console.log('1'.padStart(2, '0')); // 01 向前补全
    console.log('¥150.'.padEnd(7, '0')); // ¥150.00 向后补全

    // raw 不编译转义符
    console.log(String.raw`Hi\n${1 + 2}`); // Hi\n3
    console.log(`Hi\n${1 + 2}`); // Hi 换行 3
}

 

 

posted @ 2019-11-07 14:39  Helzeo  阅读(140)  评论(0)    收藏  举报