正则表达式

作者: WANG_M | 来源:发表于2018-02-27 18:19 被阅读9次

    正则表达式很好用,我们先来说说什么是正则表达式

    正则表达式
    也称规则表达式。(Regular Expression,在代码中常简写为regex、regexp或RE),正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    特点

    1. 灵活性、逻辑性和功能性非常强;
    2. 可以迅速地用极简单的方式达到字符串的复杂控制;
    3. 对于刚接触的人来说,比较晦涩难懂。
      4.性能要比正常函数好;
      5.正则都是操作字符串的(不用来操作对象其他类型)。

    下面我们来看一个栗子,看看它到底好在哪?

    我们判断一个字符串中的数字,我们先用常用的方法实现一遍

    //判断数字
    function findNum(str){
    var arr = [];
    var tmp = '';
    for(var i=0;i<str.length;i++){
        if( str.charAt(i)<='9' && str.charAt(i)>='0' ){
            tmp += str.charAt(i);}
        else{
            if(tmp){
                arr.push(tmp);
                tmp = '';}
            }
        }
    if(tmp){
      arr.push(tmp);
      tmp = '';}
      return arr;
    };
    alert(findNum(str));  //123,54,33,1,879
    

    看完这个栗子,大家是不是觉得好麻烦,下面就来看看正则是怎么实现的

    var str = 'haj123sdk54hask33dkhalsd879';
    function findNum(str){
       return str.match(/\d+/g);
    };
    alert(findNum(str));  //123,54,33,1,879
    

    简单的几行代码就实现,这也正是正则的强大之处。

    写法

    var arr = []; /var arr = new Array();
    var obj = {}; /var obj = new Object();
    var re = /a/; /var re = new RegExp('a');
    

    正则的写法和数组对象基本一样,我们推荐使用前面的写法
    当需要给正则传参时,要使用后面这种写法。

    正则表达式的方法
    test
    正则去匹配字符串,返回布尔值,成功返真,失败返假,用途是判断。
    正则.test(字符串);

    栗子看得更直接一点

    var str = "abcdef";
    var re = /bc/;
    alert(re.test(str));  //true
    

    search
    正则去匹配字符串,如果成功返回匹配成功的位置,失败返回-1(类似indexOf)。
    在正则里默认是区分大小的,如果不需要区分,在正则的最后面加标识i。
    字符串.search(正则);

    var str = 'abcdef';  
    var re = /B/i;
    alert(str.search(re));  //1 
    

    replace
    replaceChild(替换节点),正则去匹配字符串,匹配成功的字符会替换成心得字符串。
    字符串.replace(正则,新的字符串); (新字符串可以是字符串也可以是回调函数)

    var str = 'aaa';
    var re = /a/g;
    // str=str.replace(re,'b');  //字符串
    str=str.replace(re,function ($0){  //回调函数
        //alert($0);  //a
        return $0+"1";
    });   
    alert(str);  //a1a1a1
    

    match
    正则去匹配字符串,如果成功返回数组,失败返回null。
    字符串.match(正则);
    str.match(/\d+/g);
    如果只写\d只会返回一个包含1的数组(正则默认匹配成功时就结束,不会继续匹配)
    如果需要查找所有数字,需要加一个标记g(全局匹配)

    var str="1 plus 2 equal 3"
    str=str.match(/\d+/g);
    alert(str);   //1,2,3
    
    
    var str = 'aaa';
    str=str.match(/\d+/g); 
    alert(str);  //null
    

    正则中的转义字符

    \n:换行符
    \s:空格      \S:非空格   
    \d:数字      \D:非数字
    \w:字符(包含字母,数字和下划线)  \W:非字符

    相关文章

      网友评论

        本文标题:正则表达式

        本文链接:https://www.haomeiwen.com/subject/xpbmxftx.html