正则表达式

知识准备
1.转义字符
   "\"会将其后面的东西转义成为文本。
2多行字符串
   var str = "aga\r\ndfads";
   console.log(str);
3.字符串换行符\n
   document.body.innerHTML="
    <div></div>
     <span></scpan>
   "; // 格式简单清晰,但是包含换行,所以将每一行后面加一个转移字符"\",可以将文本回车转义掉,不再是回车
另外一个解决方式
   document.body.innerHTML=
      "<div></div>"+
       "<span></span>"+.....

--------------------------------------------------------------------------------------------------

正则表达式
  
RegExp 是正则表达式的缩写。
检索某个文本时,可以使用RegExp模式来描述要检索的内容。
简单的模式可以是一个单独的字符。
更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。
可以规定字符串中的检索位置,以及要检索的字符类型,等等。


正则表达式的应用:匹配特殊字符或有特殊搭配原则的字符的最佳选择

两种创建方式:
   直接量   // 推荐使用
   new RegExp();

和Date()类似,可以new对象

RegExp对象的方法
 1.test()  //检索字符串中的指定值,返回值是true或false
  例:
   var str = "abdsd";
   var reg =new RegExp("b");  // 创建对象
   var reg = /abc/;  // 规定的字符片段
   console.log(reg.test(str)); //返回值是false
 2.exec() // 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
 3.compile() // 既可以改变检索模式,也可以添加或删除第二个参数。

  正则表达式后面可以跟属性,分别是“g”,“i”,“m“,代表的意思分别是
   "g":全局匹配 (查找所有匹配而非在找到第一个匹配后停止)
   "i":区分大小写(ingoreCase:执行对大小写不敏感的匹配)
   "m":多行匹配(ECMAScript标准化之前,不支持m属性,多行匹配的必须是字符串才可以)

var reg = /abc/igm; // g i m可以随意组合放在其后
var reg =new RegExp("b",”mgi“);第一个可以是字符串,也可以是已知的正则表达式,比如上面定义的reg变量,第二个参数可以写属性,三者中任何一个或者其组合 
例:
  var reg = /abc/;
  var reg1 = new RegExp(reg); // reg1和reg是内容一样,但是不同的对象
  var reg2 = RegExp(reg); // 相同的内容,相同引用对象

g:

var reg = /ab/g;
var str = "abababababab";
str.match(reg);
---> ["ab","ab","ab","ab","ab","ab"
i:
例:
 var reg = /abc/i;
 var str = "EabC";
str.match(reg);
--->["abc"]
m:
例:
        var reg = /^abc/gm;   // 以a开头多行全局匹配
        var str = "abcabc\nabcabcabcabc";
        console.log(str.match(reg));

     --->["abc","abc"]

 

正则表达式的高级语法应用:

http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

1.[abc] 查找方括号之间的任何字符。// []一个方括号代表一位,里面填的东西代表一个区间

var reg = /[][][]/;  // 相当于 reg=/123/;

var reg = /[0-9A-z]/;

2.^

  1).放在[]外,表示以其后面的字母开头

  2).放在[]内,表示非,除了的意思

3.(A|B)

或的意思

 

元字符(拥有特殊含义的字符)

 .  查找单个字符,除了换行和行结束符

\w   ===[0-9A-z_]

\W===[^\w]

\d ===[0-9]

\D===[^\d]

\s ===[\t\n\r\v\f ]   // 空白字符(空格符 ,制表符\t,回车符\r,换行符\n,垂直换行符\v,换页符\f)

\S ===[^\s]

\b===单词边界

\b===非单词边界

 

检验一个字符串首尾是否含有数字

  var reg = /^\d[\s\S]*\d$/;

重要的方法

// reg.exec();

例:

        var reg = /ab/g;  // g全局匹配,不加的话,游标一直是0
        var str = "ababab";
        console.log(reg.lastIndex); // exec的游标,也就是匹配位置
        console.log(reg.exec(str)); // exec方法的属性是lastIndex
        console.log(reg.lastIndex); // 游标的变化就是lastIndex的变化,结束的位置就是下一个匹配的开始位置
        console.log(reg.exec(str));
        console.log(reg.lastIndex);
        console.log(reg.exec(str));// 控制台有时候会显示不完全信息,用console.log()来打一你
        console.log(reg.lastIndex);
        console.log(reg.exec(str));// 0,2,4,6,NULL,0...循环匹配

输出的结果:

 

打开第一个输出结果,看数据结构属于类数组:

注意:lastIndex的值,可以手动改写

        var reg = /ab/g;  // g全局匹配,不加的话,游标一直是0
        var str = "ababab";
        console.log(reg.lastIndex); // exec的游标,也就是匹配位置
        console.log(reg.exec(str)); // exec方法的属性是lastIndex

        reg.lastIndex=0;

       console.log(reg.exec(str));  // 可以手动修改游标的位置

       console.log(reg.lastIndex); // 值输出的是游标为0的匹配结果

 

()的应用

1.指定或的关系  // 有疑问???

2.子表达式

例:

  var str = "aaaaa”;

  var reg= "/(a)\1/g";  // 子表达式\1反向引用第一个子表达式匹配的内容

  var str = "aabb";

  var reg = /(\w)\1(\w)\2/; // \1反向引用第一个子表达式匹配的内容,\2反向引用第二个子表达式匹配的内容

支持正则表达式的string对象方法

  • match();

str.match(reg); // 字符串匹配正则表达式

console.log(str.match(reg));    // 将所有满足条件的匹配结果打印出来

  -->

  var str = "aabb";

  var reg = /(\w)\1(\w)\2/g;// 属于完全匹配,

  console.log(str.match(reg));

-->

     展开该结果:

     

  • search()方法 // 匹配的位置,跟lastIndex没有关系,返回值如果没有匹配,返回值为-1
  • split()方法 // 可以用字符串,也可以用正则表达式,返回值包含满足子表达式的值
  • replace()方法 // str.replace("a","b");  a替换b

  例:

    1)var  str = "aa";

    console.log(str.replace("a","b")); // "ba"  原因是replace没有访问全局的能力  跟正则表达式不一样

    2)var str = "aa";

    var reg =/a/;

    console.log(str.replace(reg,"b")); // "ba"

    3)var str = "aa";

    var reg =/a/g;

   console.log(str.replace(reg,"b")); // "bb"  全局匹配

    4)aabb用正则表达式替换成bbaa

     var str = "aabb";

     var reg = /(\w)\1(\w)\2/g;

     console.log(str.replace(reg,"$2$2$1$1")); // "bbaa" 第二个参数一定是字符串

    5)基于4)的写法

      console.log(str.replace(reg,function($,$1,$2){   // $表示正则表达式匹配的全局内容,$1表示第一个子表达式的内容,$2表示第二个子表达式的内容
            return $2+$2+$1+$1;
        }));

   6)基于5)的可以有toUpperCase(),toLowerCase()

   7).驼峰式写法正则表达式

   // the-first-name 变成 小驼峰字符串 theFirstName

        var str = "the-first-name";
        var reg = /-(\w)/g;
        console.log(str.replace(reg,function($,$1) {//$(第一个参数)表示正则表达式匹配的全局内容,$1(第二个参数)表示第一个表达式的内容(\w)function执行次数是匹配的次数
            return $1.toUpperCase();
        }));

// 正向预查,正向断言

?=n

var str = "aaaaa";

var str = /a(?=b)/g;  // a后面跟着b的匹配  str = /a(?!b)/g; 

 

注意:特殊的字符

    \ , *,?等,在正则表达式中要匹配的话,需要在前面加\,将其转义$得用$进行转义 -->$$ 

 

去重的应用

        var str = "aaaaaaabbbccccc";
        var reg = /(\w)\1*/g;
        console.log(str.replace(reg,"$1"));  // “abc”

将长的数字写成美元的格式三位数加.

        var str = "100000000000000";
        var reg = /(?=(\B)(\d{3})+$)/g;
        console.log(str.replace(reg,"."));

转载于:https://my.oschina.net/korabear/blog/1803152

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值