• 正则


    元字符:

        水平制表符Tab
    v    垂直制表符

      换行

      回车

         空字符

    f      换页符

    cX    ctrl+X

    字符类:

    []  a[ab]c=>aac、abc

    [^]  表示取反

    范围类:

    [a-z]

    预定义类及边界:

    .   任意字符(除回车和换行)

    d  数字     D  非数字

    s  空白符  S  非空白符

    w   单词(字母、数字、下划线)  W  非单词

      单词边界  B  非单词边界

    ^    开始

    $    结束

    量词:

    ?      0|1,出现0次或1次
    +       1+,至少出现一次

    *       0|1|1+,任意次

    {n}     出现n次

    {n,m}  出现n~m次

    {n,}    至少出现n次

    贪婪模式、非贪婪模式:

    d{3,6}    贪婪模式, 尽可能最多的匹配

    d{3,6}?  非贪婪模式,最少匹配

    分组:

    ()  分组

    |   或

    var str = '2013-16-17';
    var re = /(d{4})-(d{2})-(d{2})/g;
    str = str.replace(re, ($0, $1, $2, $3) => {
        console.log($0, $1, $2, $3);      // $0: 2013-16-17    $1: 2013   $2: 16   $3: 17
        return $1 + '.' + $2 + '.' + $3
    })
    str = str.replace(re, '$1.$2.$3')  // 2013.16.17 

    前瞻:

    exp(?=assert)  正向前瞻

    exp(?!assert)   负向前瞻

    正向前瞻:

    var str = 'a2*34vv';
    var re = /w(?=d)/g; // 匹配(字母、数字、下划线) ,再往后看是不是(数字) , 真正的替换是w
    str.replace(re, '=');   // 结果: =2*=4vv
    

    负向前瞻:

    str.replace(/w(?!d)/g, '=')   // 再往后看不是数字,结果: a=*3===
    

      

    对象属性:

    global   全局,默认false,/reg/g

    ignore case    忽略大小写,默认false,/reg/i

    multiline  多行,默认false,/reg/m

    lastIndex  匹配完的下一个位置

    source  正则表达式的文本字符串

    test、exec方式:

    RegExp.prototype.test(str)    => reg.test(str),返回Boolean

    RegExp.prototype.exec(str)   => reg.exec(str),返回Array

    str = 'a1b2cc3d4'
    re = /(?<firstNum>d).(d)/g  // 分组中的?<name>,表示为分组起个名字
    re.exec(str)  // ["1b2", "1", "2", index: 1, input: "a1b2cc3d4", groups: {firNum:"1"}]
    

    字符对象方法:

    String.protoptype.search(reg)  => str.search(reg),替换

    String.prototype.match(reg)    => str.match(reg), 返回Array,当没有加g时,结果和exec一样,加了g,只显示匹配的

    String.prototype.split(reg)       => str.split(reg),返回Array

    重复子项(1或2......):

    re = (a)(b)(c)/2
    re.test('abcb')   //true, 这里/2表示b,因此匹配成功
    
    //使用场景
    re = /w/w    //表示不同的字符,如:c9
    re = (/w)/1  //表示相同,如:cc、99

    找重复项最多的字符和个数

    let str = 'aabbcccffccc';
    str = str.split('').sort().join('');   // aabbccccccff
    
    let re = /(w)1+/g;
    let mArr = str.match(re)  // ["aa", "bb", "cccccc", "ff"]
    
    let moreValue = ''
    let len = 0
    
    mArr.forEach((value, index) => {
        if (value.length > len) {
            len = value.length
            moreValue = value.charAt(0)
        }
    })
    
    console.log('最多的字符:' + moreValue + ',总共出现了' + len + '次');
    

      

     千位符正则

    let num1 = 123   // 123
    let num2 = 1234 // 1,234
    let num3 = 12345 // 12,345
    let num4 = 123456 // 123,456
    let num5 = 1234567 // 1,234,567
    let num6 = 1234567.00012  //1,234,567.00012
    
    
    let re_int = /(d)(?=(d{3})+$)/g
    let re_float = /(d)(?=(d{3})+.)/g
    
    function replace(num) {
        if (/./.test(num)) {
            console.log('float')
            return num.toString().replace(re_float, ($0, $1) => {
                return $1 + ','
            })
        } else {
            console.log('int')
            return num.toString().replace(re_int, ($0, $1) => {
                return $1 + ','
            })
        }
    
    }
    

      

  • 相关阅读:
    mysql---面试题2
    Mysql--存储过程
    MySql--锁机制
    MYsql事务
    IDEA创建新项目保存pom文件时,出现错误Cannot resolve org.openjfx:javafx.base:11.0.0-SNAPSHOP
    线程中的多线程、并行和并发、同步和异步、阻塞和非阻塞、线程安全
    Java里的Arrays.asList()返回的List不能使用add、remove方法?
    服务器可用的Socket
    MessageBox.Show
    NPOI 教程
  • 原文地址:https://www.cnblogs.com/joya0411/p/3742640.html
Copyright © 2020-2023  润新知