正则.md

正则:

  1. /a|b|c|d/ 匹配a或者b, c, d

  2. 用通配符.匹配任何内容

  3. 匹配a, b 或 c

  4. 匹配集合 [0-9] [a-z0-9]

  5. 匹配差集 [^0-9] // 注意, 这个^ 在字符集里面是否定的意思, 而在字符集外面, 是开始的意思

  6. 匹配1个或者多个a : /a+/

  7. 匹配零个或者多个ao : /ao*/ 会匹配出 a

  8. 惰性匹配: 匹配长度为最小字符串 /<.*?>/ (注意了, js中的正则本身是贪婪匹配)

  9. 前置断言 (<=[xxx]?)

  10. 以xxx开始的字符串: /^xxx/

  11. 以xxx结尾的字符串: /xxx$/

  12. 元字符:
    \w // 所有的数字和字母
    \W // w的差集
    \d // 所有数字
    \D // 所有非数字
    \s // 此匹配模式不仅匹配空格,还匹配回车符、制表符、换页符和换行符,你可以将其视为与[\r\t\f\n\v]类似。所有非数字字母
    \S // 匹配所有非空白字符
    /a{3,5}h/ // 指定匹配模式的上界下界
    /a{3,}h/ // 指定匹配模式的下界
    /a{3}h/ // 指定数量匹配
    /colou?r/ // 模糊查询可选项: u就是可选项, 可以有, 也可以没有, 但是不可以是其他字符

  13. 前置断言 (?=…) 以…开头
    正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。

  14. 后置断言 (?!…) 不以…开头
    负向先行断言会查看并确保搜索匹配模式中的元素不存在。

  15. 使用捕获组重用模式

    1
    2
    3
    let repeatStr = "regex regex";
    let repeatRegex = /(\w+)\s\1/;
    repeatStr.match(repeatRegex); // Returns ["regex regex", "regex"]
  16. 使用捕获组搜索和替换

    1
    "Code Camp".replace(/(\w+)\s(\w+)/, '$1'); // 此时, 使用括号括起来的元素就是一个组, 这个组会命名为$1 - $n在替换的时候可以使用到
  17. 用正则表达式写一个trim

    1
    2
    3
    let hello = "   Hello, World!  ";
    let wsRegex = /(\s+)(\w+.+\w+\S)(\s+)/;
    let result = hello.replace(wsRegex, '$2');
  18. 注意 reg.test()中的reg正则对象存在一个值, 这个值表示我使用test()方法匹配的起点index, 如果稍不注意,就很容易翻车

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (function(){
    const reg = /o/g;
    function isHasO(str){
    // reg.lastIndex = 0; 这样就可以避免这种情况
    return reg.test(str)
    }
    var str = 'google';
    console.log(isHasO(str))
    console.log(isHasO(str))
    console.log(isHasO(str))
    }())