• 正则表达式


    1.元字符

    定义字符的意义

    元字符描述
    . 匹配单个字符,除了换行和行结束符
    w 匹配单词字符
    W 匹配非单词字符
    d 匹配数字
    D 匹配非数字
    s 匹配空白符
    S 匹配非空白符
     匹配单词边界
    B 匹配非单词边界
    匹配 NUL字符
    匹配换行符
    f 匹配换页符
    匹配回车符
    匹配制表符
    v 匹配垂直制表符
    xxx 匹配以八进制数 xxxx 规定的字符
    xdd 匹配以十六进制数 dd 规定的字符
    uxxxx 匹配以十六进制 xxxx规定的 Unicode 字符

    2.量词

    控制字符出现的次数。

    限定符描述
    n* 匹配包含任何包含0个或者多个n的字符串
    n+ 匹配包含任何包含至少1个n的字符串
    n? 匹配包含0个或者1个n的字符串
    n{x} 匹配包含任何包含x个n的字符串
    n{x,} 匹配包含任何包含至少x个n的字符串
    n{x,y} 匹配包含任何包含至少x个,至x个n的字符串
    n$ 匹配任何以n结尾的字符串
    ^n 匹配任何以n开头的字符串

    3.分组

    一个中括号就代表一个字符,中括号的目的就是匹配某个特定字符。

    分组说明
    [abc] 查找一个在中括号中的任意一个字符
    [abc] 查找一个不再中括号中的任意一个字符,^表示取反
    [0-9] 查找一个任何从0至9的数字
    [a-z] 查找一个任何从a至z的字母
    [A-Z] 查找一个任何从A至Z的字母
    [A-z] 查找一个任何从A至z的字母
    [u4e00-u9fa5] 查找一个汉字

    4.或

    特殊符号:正则1|正则2, 或者。 符合或两边其中一个就可以匹配。

    // 匹配三种其中一种字符串
    var str1 = 'houfei111111'
    var str2 = '000houfei222222'
    var str3 = '000houfei3'
    var reg1 = /^houfei1|houfei2|houfei3$/
    
    console.log(reg1.test(str1)) // true
    console.log(reg1.test(str2)) // true
    console.log(reg1.test(str3)) // true

    5.分组

    // ()——提高匹配的优先级
    // 组指的是一个小集体,分组就是将一个大集体可以分成几个小集体。
    // 如:控制你的名字连续出现的次数,最少1次,最多3次
    var reg = /^(小明){1,3}$/

    6.贪婪匹配和惰性匹配

    贪婪匹配,尽可能多的匹配;惰性匹配,仅仅匹配一次

    str = '<p>a00</p><p>123</p>'
    var re1 = str.match(/<p>[Ww]+?</p>/gi)
    console.log('非贪婪模式:
    
    1:' + re1[0] + '
    2:' + re1[1])
    // 1:<p>a00</p>
    // 2:<p>123</p>
    
    re1 = str.match(/<p>[Ww]+</p>/gi)
    console.log('贪婪模式:
    
    ' + re1) // <p>a00</p><p>123</p>
    
    re1 = str.match(/<p>(.+?)</p>/i)
    console.log('非贪婪模式,且不要标记:
    
    1:' + re1[1]) // 1:a00
    
    re1 = str.match(/<p>(.+)</p>/i)
    console.log('贪婪模式,且不要标记:
    
    ' + re1[1]) // a00</p><p>123

    7.修饰符

    // g,全称global,有 全局 的意思,表示全局匹配。
    var reg = /hello/g
    // i,全称ignore,有 忽视、忽略 的意思,表示匹配字母时,可以忽略字母的大小写。
    var reg = /hello/i;

    8.转义符

    在正则中表示特殊符号。去除.的特殊意义,需要转义: .

    // 验证邮箱  
    ^w{2,}@[0-9A-z]{2,}.[A-z]{2,3}$
    
    // 验证身份证号
     /^(d{6}(18|19|20)d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$)|(^(d{8}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}))$/
      
      // 验证手机号
    ^((13[0-9])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|147|166|198|199)\d{8}$
    
    // 校验字母和汉字
    /^[u4e00-u9fa5|a-zA-Z]+$/g

    9.字符串对象方法

    • 正则对象.test(字符串) ; 用于检测字符串是否匹配某个规则。返回true和false。

    • 字符串.match(正则对象); 获取匹配正则的子字符串,返回一个数组。

    • 字符串.replace(正则对象,替换后的内容); 替换所匹配正则的子字符串。返回替换后的字符串。

    • 字符串.split(正则对象); 按照正则规则拆分字符串,返回一个数组。

    • 字符串.search(正则对象); 获取第一个匹配正则的子字符串的位置

    // 匹配http:
    let reg = /http:///;
    
    // 测试
    let str = '123456798as.txtdfgbbb.txt'
    let reg = /.txt/ig
    console.log(reg.test(str)) // true
    console.log(str.match(reg)) // [".txt", ".txt"]
    console.log(str.replace(reg, '***')) // 123456798as***dfgbbb***
    console.log(str.split(reg)) // ["123456798as", "dfgbbb", ""]
    console.log(str.search(reg)) // 11

    将字符串中的部分字符替换为特殊字符

    // 首位保留一位,末尾保留3位,中间全部替换为*,有多少字符替换多少
    var re = /(.{1})(.*)(.{3})/
    var str = '1234asdadsad567899'
    str=str.replace(re,function(a,b,c,d){
      console.log(a,b,c,d) //1234asdadsad567899   1   234asdadsad567   899
      return b+c.replace(/./g,"*")+d;
    });

    正则替换不合法字符' " < >

    /** 将text中的html字符转义, 仅转义  ', ", <, > 四个字符
      * @param  { String } str 需要转义的字符串
      * @returns { String }     转义后的字符串 
     */
    function unhtml(str) {
        return str ? str.replace(/[<">']/g, (a) => {
            return {
                '<': '&lt;',
                '"': '&quot;',
                '>': '&gt;',
                "'": '&#39;'
            }[a]
        }) : '';
    }
    unhtml('<asfd45645sd4a<>">')

    将手机号中间4位变成*

    var re = /(.{3})(.*)(.{3})/
    var str = '1234567899'
    str=str.replace(re,function(a,b,c,d){
        return b+c.replace(/./g,"*")+d;
    });

    VUE 中绑定在input的keyup事件上,只允许输入特殊的字符

    // 只允许输入 数字 和 Xx
    this.idCard = this.idCard.replace(/[^(d|Xx)]/gi, '')
    
    // 只允许输入 汉字
    this.idCard = this.idCard.replace(/^[u4e00 -u9fa5]/g, '')
    
    // 只允许输入 字母
    this.idCard = this.idCard.replace(/[^A-z]/gi, '')
    
    // 只允许输入 汉字 和 字母
    this.idCard = this.idCard.replace(/[^(u4e00-u9fa5|a-zA-Z)]/gi, '')
    
    // 只允许输入 .
    this.idCard = this.idCard.replace(/[^(/.)]/gi, '')
    
    // 只允许输入 数字 和 .
    this.idCard = this.idCard.replace(/[^(0-9/.)]/g, '')
    
    // 测试 只允许输入 金额 100.98
    // this.idCard = this.idCard.replace(/^(d+(.d{2})?)$/g, '')
    // if (/^(d+.d{1,2}|d+)$/.test(this.idCard)) {
    //   console.log(true)
    // } else {
    //   console.log(false)
    // }
    // let id = this.idCard
    // this.idCard = id.match(/d+(.d{0,2})?/) ? id.match(/d+(.d{0,2})?/)[0] : ''

    一些数字规则总结

    /*
    1. 数字:/^d+$/ => /^d+$/.test('123')
    2. n位数字: /^d{n}$/ => /^d{n}$/.test('123')
    3. 至少n位数字: /^d{n,}$/ => /^d{n,}$/.test('1234')
    4. m~n位数字: /^d{m,n}$/ => /^d{m,n}$/.test('12')
    5. 0和非0开头的数字: /^(0|[1-9][0-9]*)$/ => /^(0|[1-9][0-9]*)$/.test('012')
    6. 非零开头,最多带2位小数的数字: /^(0|[1-9][0-9]*)(.[0-9]{1,2})?$/ => /^(0|[1-9][0-9]*)(.[0-9]{1,2})?$/.test('0.12')
    7. 带1-2位小数的正数或负数:/^(-|+)?(0|[1-9][0-9]*)(.[0-9]{1,2})?$/ => /^(-|+)?(0|[1-9][0-9]*)(.[0-9]{1,2})?$/.test('0.12')
    8. 正数、负数和小数: /^(-|+)?(0|[1-9][0-9]*)(.[0-9]+)?$/ => /^(-|+)?(0|[1-9][0-9]*)(.[0-9]+)?$/.test('+900.0100')
    9. 有2位小数的正实数: /^+?(0|[1-9][0-9]*)(.[0-9]{2})$/ => /^+?(0|[1-9][0-9]*)(.[0-9]{2})$/.test('+33.12')
    10. 有1-3位小数的正实数: /^+?(0|[1-9][0-9]*)(.[0-9]{1,3})$/ => /^+?(0|[1-9][0-9]*)(.[0-9]{1,3})$/.test('+33.12')
    11. 非零的正整数: /^+?[1-9]([0-9]+)?$/ => /^+?[1-9]([0-9]+)?$/.test('9')
    12. 非零的负整数: /^-[1-9]([0-9]+)?$/ => /^-[1-9]([0-9]+)?$/.test('-90')
    13. 非负整数: /^+?(0|[1-9][0-9]*)$/ => /^+?(0|[1-9][0-9]*)$/.test('+0')
    14. 非正整数: /^-?(0|[1-9][0-9]*)$/ => /^-?(0|[1-9][0-9]*)$/.test('-9099')
    */
  • 相关阅读:
    The FLARE On Challenge
    CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)
    CVE-2014-0322漏洞成因与利用分析
    CVE-2013-3897漏洞成因与利用分析
    译:《深入解析WINDOWS VISTA APC》——PART 1
    MemoryInjector 无痕注入
    一个APC引起的折腾 之题外记
    一个APC引起的折腾
    2020
    javascriptcore调试笔记
  • 原文地址:https://www.cnblogs.com/houfee/p/10634637.html
Copyright © 2020-2023  润新知