• JavaScript之正则表达式


    转义

    概念:转换意义,改变意义

    转义符号:

    转义字符: 字符 (注意:只能能在编辑器上使用,而不能在文本中使用,即在html标签中不可使用)

    特殊转义字符:

      (a) : 换行符
      (b) : 回车符
      (c) : 制表符(四个字符)

     1 var str1 = "我是一名'牛逼'的程序员";
     2 console.log(str1); // 我是一名'牛逼'的程序员
     3 var str2 = "我是一名"牛逼"的程序员";
     4 console.log(str2); // error
     5 var str3 = "我是一名"牛逼"的程序员";
     6 console.log(str3); //我是一名"牛逼"的程序员
     7 var str4 = "我是一名\牛逼\的程序员";
     8 console.log(str4); // 我是一名牛逼的程序员
     9 
    10 
    11 var str1 = '<h1>字符串1</h1>' +
    12           '<h2>字符串2</h2>' +
    13           '<h3>字符串3</h3>';
    14 
    15 var str2 = '<h1>字符串1</h1>
    16            <h2>字符串2</h2>
    17            <h3>字符串3</h3>';
    18 
    19 console.log(str1); // <h1>字符串1</h1><h2>字符串2</h2><h3>字符串3</h3>
    20 console.log(str2); // <h1>字符串1</h1>           <h2>字符串2</h2>           <h3>字符串3</h3>

    正则(RegExp regular expression)

    概念:检索数据中符合要求正则要求的数据
    公式:var reg = new RegExp(正则表达式,属性/修饰符)

      正则属性(修饰符):

        ‘g': global 全局匹配

        'i': ignore case 不区分大小写

        'm': multi-line 多行匹配

     1 // 第一种写法
     2 var str = 'This is a test. Test is important';
     3 
     4 var reg1 = new RegExp('Test', 'g');
     5 
     6 console.log(reg1.test(str)); // true
     7 console.log(str.match(reg1)); // ['Test']
     8 
     9 var reg2 = new RegExp('Test', 'gi');
    10 
    11 console.log(reg2.test(str)); // true
    12 console.log(str.match(reg2)); // ['test', 'Test']
    13 
    14 var reg3 = new RegExp('Test', 'gim');
    15 
    16 console.log(reg3.test(str)); // true
    17 console.log(str.match(reg3)); // ['test', 'Test']
    18 
    19 // 第二种写法
    20 
    21 var str = 'This is a test. Test is important';
    22 
    23 var reg1 = /Test/g;
    24 
    25 console.log(reg1.test(str)); // true
    26 console.log(str.match(reg1)); // ['Test']
    27 
    28 var reg2 = /Test/gi;
    29 
    30 console.log(reg2.test(str)); // true
    31 console.log(str.match(reg2)); // ['test', 'Test']
    32 
    33 var reg3 = /Test/gim;
    34 
    35 console.log(reg3.test(str)); // true
    36 console.log(str.match(reg3)); // ['test', 'Test']

     正则初级使用

     1 // 1: 匹配成功过后的不会重复匹配,没有匹配成功的会重复匹配
     2 var str = '1032kdsjfsdhj123sdfsdf',
     3     reg = /[1234567890][1234567890][1234567890]/g;
     4 
     5 console.log(str.match(reg)); // ['103', '123']
     6 
     7 // 2: 匹配区间
     8 var str = 'sdfsdfsfs231Fssfd-sdfsd',
     9     reg = /[0-9][A-Z][a-z]/g;
    10 console.log(str.match(reg)); // ['1Fs']
    11 
    12 
    13 // 3: 多个区间取或,(注意:[A-Za-z]等价[A-z],大写字母一定要放到前面,小写字母一定要放到后面,否则会报错)
    14 var str = 'sdfsdfsfs231Fssfd-sdfsd',
    15   reg1 = /[0-9A-Za-z][A-Z][a-z]/g,
    16   reg2 = /[0-9A-z][A-Z][a-z]/g;
    17 console.log(str.match(reg1)); // ['1Fs']
    18 console.log(str.match(reg2)); // ['1Fs']
    19 
    20 // 4:^的使用
    21 var str = '0Sdfsdfsfs231Fssfd-sdfsd',
    22     reg1 = /[^0][A-Z][a-z]/g,
    23     reg2 = /^[0][A-Z][a-z]/g
    24 console.log(str.match(reg1)); // ['1Fs'] ^放到选择括号内的最前面作非使用
    25 console.log(str.match(reg2)); // ['0Sd'] ^放到表达式前面表示只匹配字符串开头
    26 
    27 // 5:|的使用
    28 var str = '123sdfsdfsfs234Fssfd-sdfsd',
    29     reg = /123|234/g;
    30 console.log(str.match(reg)); // ['123', '234'] 把符合条件的都选出来
    31 
    32 
    33 // 6:()的使用
    34 
    35 var str = '123sdfsdfsfs234Fssfd-sdfsd',
    36   reg = /(123|234)[A-z]/g;
    37 console.log(str.match(reg)); // [ '123s', '234F' ] ()括号里面的内容优先执行

    元字符 正则使用的转义字符

     1 // 元字符 正则使用的转义字符
     2 // w === [0-9A-z_]
     3 var str = '123absdf',
     4     reg = /wab/g;
     5 
     6 console.log(str.match(reg)); // [ '3ab' ]
     7 
     8 // W === [^w]
     9 var str = '123%absdf',
    10   reg = /Wab/g;
    11 
    12 console.log(str.match(reg)); // [ '%ab' ]
    13 
    14 // d === [0-9] digit
    15 var str = '123absdf',
    16   reg = /dab/g;
    17 
    18 console.log(str.match(reg)); // [ '3ab' ]
    19 
    20 // D === [^d]
    21 var str = '123%absdf',
    22   reg = /Dab/g;
    23 
    24 console.log(str.match(reg)); // [ '%ab' ]
    25 
    26 // s === [
    	vf] (不常用)
    27 // 
    : 回车符  
    : 换行符  	: 制表符  tab  v: 垂直换行符  f: 换页符
    28 
    29 // S === [^s] (不常用)
    30 //  单词边界
    31 var str = 'This is a test',
    32     reg = /This/g;
    33 console.log(str.match(reg)); //[ 'This' ]
    34 
    35 var str = 'This is a test',
    36   reg = /Thi/g;
    37 console.log(str.match(reg)); //[ 'Thi' ]
    38 
    39 // B 非单词边界
    40 
    41 var str = 'This is a test',
    42   reg = /ThiB/g;
    43 console.log(str.match(reg)); //[ 'Thi' ]
    44 
    45 var str = 'This is a test',
    46   reg = /BhiB/g;
    47 console.log(str.match(reg)); //[ 'hi' ]
    48 
    49 // . 可以匹配除了回车和换行的所有字符
    50 var str = 'This
    is
    a	test',
    51     reg = /./g;
    52 console.log(str.match(reg)); // [ 'T', 'h', 'i', 's', 'i', 's', 'a', '	', 't', 'e', 's', 't' ]
    53 
    54 // 匹配三位连续的所有字符
    55 var str = 'abcdef',
    56   reg = /[wW][sS][dD]/g;
    57 console.log(str.match(reg)); // [ 'abc', 'def' ]

     正则量词

    规则:字符串从左到右,依次先匹配多,再匹配少,如果一旦匹配上就不回头匹配。
    (1)不回头
    (2)贪婪模式
     1 // 1. n+ {1, 正无穷}
     2 var reg = /w+/g,
     3     str = 'abcdefg';
     4 console.log(str.match(reg)); // [ 'abcdefg' ]
     5 
     6 // 2. n* {0, 正无穷}
     7 var reg = /w*/g,
     8   str = 'abcdefg';
     9 console.log(str.match(reg)); // [ 'abcdefg', '' ]
    10 
    11 // 3. n? {0, 1}
    12 var reg = /w?/g,
    13   str = 'abcdefg';
    14 console.log(str.match(reg)); // [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', '' ]
    15 
    16 // 4. n{x,y} {1,正无穷} === n+  {0,正无穷} === n*  {0,1} === n?
    17 var reg = /w{2,3}/g,
    18   str = 'abcdefg';
    19 console.log(str.match(reg)); // [ 'abc', 'def' ]
    20 
    21 var reg = /w{0,3}/g,
    22   str = 'abcdefg';
    23 console.log(str.match(reg)); // [ 'abc', 'def', 'g', '' ]
    24 
    25 var reg = /w{0,}/g,
    26   str = 'abcdefg';
    27 console.log(str.match(reg)); // [ 'abcdefg', '' ]
    28 
    29 // 5. ^n 匹配任何以n开头的字符串
    30 var reg = /^ab/gm,
    31   str = 'abcdefg
    abef';
    32 console.log(str.match(reg)); // [ 'ab', 'ab' ]
    33 
    34 // 6. n$ 匹配任何以n结尾的字符串
    35 var reg = /ab$/gm,
    36   str = 'abcdeab
    abab';
    37 console.log(str.match(reg)); // [ 'ab', 'ab' ]
    38 
    39 // 练习1:检查字符串是否以abcd开头和以abcd结尾
    40 var reg = /^abcdw*abcd$/,  // 建议使用 reg = /^abcd.*abcd$/
    41     str = 'abcd123123abcd';
    42 console.log(reg.test(str)); // true
    43 
    44 // 练习2:检查字符串是否以abcd开头或以abcd结尾
    45 var reg = /^abcd|abcd$/,
    46   str = 'abcd123123abcd';
    47 console.log(reg.test(str)); // true
    48 
    49 // 练习3:检查字符串是否以abcd和abcd结尾,并且开头结尾之间是数字
    50 var reg = /^abcdd+abcd$/, // 不能用d*
    51   str = 'abcd213abcd';
    52 console.log(reg.test(str)); // true
    53 
    54 // 练习4:匹配以138开头的11位手机号
    55 var reg = /^138d{8}/g,
    56     str = '13896441012';
    57 console.log(str.match(reg)); // [ '13896441012' ]
    58 
    59 // 7. ?=n 匹配任何其后紧接着指定字符串n的字符串
    60 var reg = /a(?=b)/g,
    61     str = 'abcdaccda';
    62 console.log(str.match(reg)); // [ 'a' ]
    63 
    64 // 8. ?!n 匹配任何其后紧接着不为指定字符串n的字符串
    65 var reg = /a(?!b)/g,
    66   str = 'abcdaccda';
    67 console.log(str.match(reg)); // [ 'a', 'a' ]
    68 
    69 // 子表达式:用括号()括起来
    70 // 反向引用:1111
    71 
    72 
    73 var reg = /(a)111/g,
    74     str = 'bbaaaaccaaaaiddddaaaa';
    75 console.log(str.match(reg)); // [ 'aaaa', 'aaaa', 'aaaa' ]
    76 
    77 var reg = /(w)111/g,
    78   str = 'bbaaaaccaaaaiddddaaaa';
    79 console.log(str.match(reg)); // [ 'aaaa', 'aaaa', 'dddd', 'aaaa' ]
    80 
    81 var reg = /(w)1(w)2/g,
    82   str = 'bbaaaaccaaaaiddddaaaa';
    83 console.log(str.match(reg)); // [ 'bbaa', 'aacc', 'aaaa', 'dddd', 'aaaa' ]
  • 相关阅读:
    利用guava来实现本地的cache缓存
    加减乘除工具类BigDecimalUtil
    linux使用apache发布静态html网页
    为什么从pycharm中打开的html文件会显示404?
    unittest测试框架生成可视化测试报告-BeautifulReport
    python虚拟环境迁移
    linux查看系统版本
    Webhook到底是个啥?
    钩子函数和回调函数的区别
    LookupError: "gw_lt" is not among the defined enum values
  • 原文地址:https://www.cnblogs.com/wanghao123/p/10503446.html
Copyright © 2020-2023  润新知