JS之正则

概念:正则表达式:用一些特殊符号(字符)代表一些特定的内容,用来查找与匹配符合规则的字符串.

一  正则表达式的定义:

1 直接定义   /正则表达是内容/[修饰符]  推荐使用 eg:var reg=/d/g

2 对象定义  var reg=new RegExp(字符串,修饰符)

二转义字符

         d        数字

         D       非数字

         s        空格

         S       非空格

         w        数字、字母、下划线

         W       非数字、非字母、非下划线

                  单词的边界,独立的部分(起始位置、结束位置、空格)

         B         非边界的部分

         .           任意一个字符

         .          真正的点

三量词

    +           {1,}            至少重复1次,最多不限

    ?           {0,1} 至少重复0次,最多重复1次

    *            {0,}            至少重复0次,最多不限

   {n,}          至少重复n次,最多不限

   {n,m}       至少重复n次,最多重复m次

    |             或者  eg: a|b

    ^             匹配开始

    $            匹配结束

    [ ]           匹配中括号中的任意一个字符,只代表一个字符  [1-9] 1-9之间的任意一个字符    [a-z] a-z之间的任意一个字母   [A-Z] A-Z之间任意一个字母

    [^1-2]     取反  排除数字1,2

四 匹配中文

   [u4e00-u9fa5]   任意一个汉字

 五 方法

1 test

 查看正则与指定的字符串是否匹配

语法: 正则.test("字符串")

返回值: true  成功

              false 失败

1 var str="xubj";
2 console.log(/b/.test(str)); // true
3 console.log(/bao/.test(str)); // false

2 search 找匹配的字符串首次出现的位置

字符串.search(字符串或者/正则/)

返回值:

找到     返回下标

未找到  返回-1

var str="nihaoxubj";
console.log(str.search("i"));// 1 返回下标
console.log(str.search(/d/g));//-1 未找到返回-1

3 match  匹配字符串或者正则,把匹配到的结果放入数组中

语法 字符串.match(字符串或者正则)

返回值:

找到     返回找到的结果数组

未找到  null

var str="xubjsdsfdsxubjsd25";
console.log(str.match(/xubj/)); // ["xubj", index: 0, input: "xubjsdsfdsxubjsd25"]
console.log(str.match(/xubj/g)); // ["xubj", "xubj"]
console.log(str.match(/z/)); // null

4 replace 替换匹配到的字符串

语法 字符串.replace(字符串或者正则,字符串或者函数)

返回值: 替换后的新字符串,原字符串不变

注意:第二个参数是函数的话一定要有返回值,否则会用undefined替换原来的内容

 

var str="xubj";
console.log(str.replace(/x/,0)); // 0ubj  返回变化的字符串
console.log(str); // xubj 原字符串不变



var newStr=str.replace(/x/,function(){
    return 'f';
});
console.log(newStr);// fubj


var newStr1=str.replace(/x/,function($0,$1,$2){
    console.log($0,$1,$2);//x 0 xubj
    /*
      参数1  要匹配的内容,与replace的第一个参数一样
      参数2 匹配内容对应的位置下标
      参数3 原字符串
    */
});


// 例子 把字符串中的x变成 *
var str="xubjnihaoxubj";
var newStr2=str.replace(/xu/g,function($0,$1,$2){
     var str="";
     for(var i=0;i<$0.length;i++){
          str+="*";
     }
     return str;
});
console.log(newStr2); // **bjnihao**bj

二 分组与子项

分组  用()

子项   放在小括号里的内容,每一个小括号可以看作是一个子项

Replace方法匹配子项

参数从第二个开始,就对应每一个子项

// replace方法匹配子项
var reg=/(d+)(-)/g;
var str="2017-12-08";
var newStr=str.replace(reg,function($0,$1,$2){
    //console.log($0);// 2017- 12- 跟正则里的内容一样(要匹配的内容)
    // console.log($1); // 2017 12 第一个分组中的内容
    // console.log($2); // - -第二个分组中的内容
    return $1+'/';
});
console.log(newStr); // 2017/12/08

Match 方法匹配子项

有g   返回的数组里没有子项

没有g 返回的数组里有子项 

//match方法匹配子项
var str="xubj";
console.log(str.match(/(xu)(b)(j)/)); //["xubj", "xu", "b", "j"]没有g 返回子项
console.log(str.match(/(xu)(b)(j)/g));//["xubj"]  有g 不返回子项
//格式化日期
var d1="2017-12-08";
var d2="2017+++12++++08";
var d3="2017////12//08";
var d4="2017+---12+++-08";
//解释 一堆数字一堆非数字一堆数字一堆非数字一堆数字
var reg=/(d+)D+(d+)D+(d+)/;
var newStr=d1.replace(reg,function($0,$1,$2,$3){
    //$1,$2,$3代表分组中的子项
    return $1+''+$2+''+$3+'';
});
原文地址:https://www.cnblogs.com/xubj/p/8022294.html