正则表达式

作者: 在宇宙Debugger | 来源:发表于2019-03-13 15:44 被阅读1次
    // 普通字符匹配
    const str = 'hello RegExp';
    /hello RegExp/.test(str); // true
    /hello regexp/.test(str); // false
    
    // i修饰符 不区分大小写
    const str = 'hello RegExp';
    /hello regexp/i.test(str); // true
    
    // g修饰符 设置匹配为全局
    const str = 'abcaaabcaa';
    str.replace(/abc/, '000'); // 000aaabcaa
    str.replace(/abc/g, '000'); // 000aa000aa
    
    // m修饰符 设置匹配为多行
    const str = '\b\t\nabc\b\t\n';
    /^abc$/.test(str); // false
    /^abc$/m.test(str); // true
    
    // u修饰符(ES6)  用来正确处理大于\uFFFF的 Unicode 字符。
    /^\uD83D/u.test('\uD83D\uDC2A'); // false
    /^\uD83D/.test('\uD83D\uDC2A'); // true
    
    // y修饰符(ES6) 与g修饰符类似, 但开始位置不同
    const str = 'aaa_aa_a';
    const r1 = /a+/g;
    const r2 = /a+/y;
    r1.exec(str) // ["aaa"]
    r1.exec(str) // ["aa"]
    
    r2.exec(str) // ["aaa"]
    r2.exec(str) // null
    
    // s修饰符(ES7) 使.能够匹配一切字符
    /./.test('\n'); // false
    /./s.test('\n'); // true
    
    // 量词 {n} 匹配n个
    /ab{2}/.test('ab'); // false
    /ab{2}/.test('abb'); // true
    
    // 量词 {n,m} 匹配 >= n 且 <= m 个
    /ab{2,3}/.test('ab'); // false
    /ab{2,3}/.test('abb'); // true
    /ab{2,3}/.test('abbb'); // true
    
    // 量词 {n,} 匹配 >= n 个
    /ab{2,}/.test('ab'); // false
    /ab{2,}/.test('abbbb'); // true
    
    // 量词 ? 相当于 {0,1} 匹配0个或1个
    /ab?/.test('a'); // true
    /ab?/.test('ab'); // true
    
    // 量词 + 相当于 {1,} 匹配至少1个
    /ab+/.test('a'); // false
    /ab+/.test('abbb'); // true
    
    // 量词 * 相当于 {0,} 匹配任意个
    /ab*/.test('a'); // true
    
    // 贪婪量词, 只要首尾匹配即算匹配
    /.*</.exec('1<545345<3234234'); // ['1<545345<']
    
    // 惰性量词 .*? 匹配最少的
    /.*?</.exec('1<545345<3234234'); // ['1<']
    
    // 惰性量词 {n,m}? +? *? 懒惰量词只会匹配最少的
    /ab{2,}/.exec('abbbbbbb'); // ['abbbbbbb']
    /ab{2,}?/.exec('abbbbbbb'); // ['abb']
    
    // 边界^锚位符, 匹配开始
    /bc/.test('abc'); // true
    /^bc/.test('abc'); // false
    
    // 边界$锚位符, 匹配开始
    /ab/.test('abc'); // true
    /ab$/.test('abc'); // false
    
    // 边界 \b 单词边界
    /get\b/.test('gets'); // false
    /get\b/.test('get'); // true
    
    // 选择
    /(h|H)ello/.test('hello');  // true
    /(h|H)ello/.test('Hello');  // true
    
    // 分组
    /(h|H)ello (\w+)/.exec('hello world'); // ['hello', 'h', 'world']
    /(?:h|H)ello (\w+)/.exec('hello world'); // ['hello', 'world']
    
    // 具名分组
    const data = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/.exec('2018-01-01');
    data.groups; // {day: "01", month: "01", year: "2018"}
    
    // 具名分组匹配
    /^(?<say>hello)\w+\1$/.test('helloworldhello');
    /^(?<say>hello)\w+\k<say>$/.test('helloworldhello');
    
    // 先行断言(?= ) (?! )
    // 正断言
    'hello Mtshen, hello world'.replace(/hello(?= Mtshen)/g, 'hi'); // hi Mtshen, hello world
    // 负断言
    'hello Mtshen, hello world'.replace(/hello(?! Mtshen)/g, 'hi'); // hello Mtshen, hi world
    
    // 后行断言 (?<= ) (?<! )
    // 正断言
    'hello Mtshen, Hi Mtshen'.replace(/(?<=hello )Mtshen/g, 'shenMengTao'); // "hello shenMengTao, Hi Mtshen"
    // 负断言
    'hello Mtshen, Hi Mtshen'.replace(/(?<!hello )Mtshen/g, 'shenMengTao'); // "hello Mtshen, Hi shenMengTao"
    
    // 字符集合
    /^[ab]$/.test('a'); // true
    /^[ab]$/.test('b'); // true
    /^[ab]$/.test('c'); // false
    // 区间写法
    /^[a-b]$/.test('a'); // true
    /^[a-b]$/.test('b'); // true
    /^[a-b]$/.test('c'); // false
    // 可以使用元字符, 但分组不生效
    /^[\w]$/.test('a'); // true
    // 可以使用非
    /^[^ab]$/.test('a'); // false
    /^[^ab]$/.test('c'); // true
    
    // 元字符
    // 数值\d
    /\d/.test('0'); // true
    /\d/.test('a'); // false
    // 非数值\D
    /\D/.test('0'); // false
    /\D/.test('a'); // true
    // 文本\w, 文本包括0-9
    /\w/.test('0'); // true
    /\w/.test('a'); // true
    /\w/.test('-'); // false
    // 非文本\W
    /\W/.test('a'); // false
    /\W/.test('-'); // true
    
    /\f/.test('\f'); // \f 匹配换行符
    /\n/.test('\n'); // \n 匹配回车符\n
    /\r/.test('\r'); // \t 匹配回车符\r
    /\t/.test('\t'); // \t 匹配垂直制表符
    /\s/.test(' '); // true \s 匹配空白字符, 相等于匹配 \f\n\r\t\v
    /\S/.test(' '); // false \S 匹配非空白字符
    

    相关文章

      网友评论

        本文标题:正则表达式

        本文链接:https://www.haomeiwen.com/subject/kdhtmqtx.html