zoukankan      html  css  js  c++  java
  • 那些年我遇到过的正则表达式

    正则感觉用得少,至少对于我来说,虽然系统性的学习过,可是,老了,还是容易忘,所以打算以后把我遇到过的都整理在此,以作自己巩固参考。

    1.把"kl$100.08"转成100.08

    这个就是从一个字符串中截取浮点数。

    console.log("kl$100.08".replace(/[^{(0-9),{.}}]/ig,"")); // 100.08

    例子实验:

    // 1).过滤出一个字符串中的数字
    var string1 = '#@1.309$';
    //把所有不是数字不是.也不是$的字符替换成空字符串
    //i : ignore g: global
    var str1 = string1.replace(/[^d,^{.},^{$}]/ig, '');
    var str1_1 = string1.replace(/[^d,{.},{$}]/ig, '');
    console.log(str1); // 1.309$
    console.log(str1_1); // 1.309$
    var str1_11 = string1.replace(/[^{d,{.},{$}}]/ig,''); // 这个算是标准写法把!!!
    console.log(str1_11); // 1.309$
    //把所有数字和.替换成字母t
    var str1_2 = string1.replace(/[d,{.}]/ig,'t');
    console.log(str1_2); //#@ttttt$

    //2).找到第一个出现数字的位置
    var string2 = 'fdjk@1.23efj';
    console.log(string2.search(/d/)); // 5

    //3).三个数字连着的
    var string3 = 'tyd35h345fsa';
    var str3 = string3.match(/ddd/g);
    console.log(str3); //["345"]

    //4).若干个数字
    var string4 = 'hs5624mf734f32f5dd0';
    var str4 = string4.match(/d+/g);
    console.log(str4); // ["5624", "734", "32", "5", "0"]

    //5).除了大写字母和数字以外的
    var string5 = '#jTyhT$T78s0s';
    var str5 = string5.replace(/[^d,^A-Z]/g,'Q');
    console.log(str5); // QQTQQTQT78Q0Q

    //6).除了小写字母和数字以外的
    var string6 = '#jTyhT$T78s0s';
    var str6 = string6.replace(/[^a-z,^d]/g,'H');
    console.log(str6); // HjHyhHHH78s0s

    2.两个特别的字符: '^' 和 ‘$' 

    在项目中遇到了下面这段代码,硬是看了半天没看懂正则到底说的啥,结果发现自己把^理解成‘非’的含义了。

    后来网上查了一下才知道,'^' 和 ‘$' 他们是分别用来匹配字符串的开始和结束,以下分别举例说明:

    "^The": 匹配以 "The"开头的字符串;
    "of despair$": 匹配以 "of despair" 结尾的字符串;
    "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配
    "notice": 匹配包含notice的字符串

    遇到的代码:

    1 function getStatus(name) {
    2     var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    3     var r = window.location.search.substr(1).match(reg);
    4     if (r !== null) return unescape(r[2]);
    5     return null;
    6 };

    所以,现在也就能理解了,其中的var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");是用来获取页面url的某个url参数的方法。

    (^|&)这个是匹配以&开头或前面没有字符的内容。([^&]*)表示不包含&的任意个字符。(&|$)表示以&结尾或者后面没有字符的内容。

    这个正则是寻找     & + url参数名字 = 值 + &; &可以不存在。
    var r = window.location.search.substr(1).match(reg);
    if (r !== null) return unescape(r[2]);
    return null;
    这里是开始匹配,找到了返回对应url值,没找到返回null.

    例子实验:

    //7).^ 和 $ 分别用来匹配字符串的开头和结束
    // ^匹配开头,注意与‘非’区分开
    var testStr1 = 'mabcde123';
    var testStr2 = 'abcde123';
    var testStr3 = '12ab34cd';
    //匹配以ab字符串开头的字符串,如果匹配到了就返回字符串构成的数组,没匹配到就返回null
    console.log(testStr1.match(/(^ab)/g)); // null
    //把以字符串m开头的字符替换成M
    console.log(testStr1.replace(/(^m)/g,'M')); // Mabcde123
    //把不是字符m的所有字符替换成M
    console.log(testStr1.replace(/[^{m,c}]/g,'M')); // mMMcMMMMM
    //把不是字符m的所有字符替换成M
    console.log(testStr1.replace(/[^m,^c]/g,'M')); // mMMcMMMMM
    //把所有不是小写字母的字符替换成6
    console.log(testStr1.replace(/[^a-z]/g,'6')); // mabcde666
    //把以小写字母开头的字符替换成6
    console.log(testStr1.replace(/^[a-z]/g,'6')); // 6abcde123
    //匹配以ab字符串开头的字符串,如果匹配到了就返回字符串构成的数组,没匹配到就返回null
    console.log(testStr2.match(/(^ab)/g)); // ["ab"]
    //把所有非数字字符替换成T
    console.log(testStr3.replace(/[^d]/g,'T')); // 12TT34TT
    //把所有非数字字符替换成T
    console.log(testStr3.replace(/[^0-9]/g,'T')); //12TT34TT
    //把以数字开始的字符替换成T
    console.log(testStr3.replace(/^[d]/g,'T')); // T2ab34cd
    //把以数字开始的字符替换成T
    console.log(testStr3.replace(/^[0-9]/g, 'T')); //T2ab34cd

  • 相关阅读:
    Mybatis动态SQL
    自己动手写一个持久层框架
    最长公共子串算法(Longest Common Substring)
    【SpringCloud】08.客户端负载均衡器:Ribbon
    ESP32 (idf-esp-v4.1)重新生成nvs分区
    IDEA导入新的springboot项目出错
    springboot集成mybatis出现问题/连接数据库出错
    Java学习周记2
    2020.8.6_Java学习日记
    9.23笔试总结
  • 原文地址:https://www.cnblogs.com/xiayu25/p/6398328.html
Copyright © 2011-2022 走看看