码迷,mamicode.com
首页 > Web开发 > 详细

js正则表达式

时间:2020-01-22 16:09:37      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:ali   pre   visit   构造函数   应该   john   相关   字符串数组   bbb   

js正则表达式

1、正则表达式


 (1)语法
   var patt=new RegExp(pattern,modifiers); 或  var patt=/pattern/modifiers;

  比如:var re = new RegExp("\\w+","g");
      var re = /\w+/g;

 (2)修饰符

  i 执行对大小写不敏感的匹配。
  g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
  m 执行多行匹配。

 (3)转义

   "\w" 是错的,正确的应该是"\\w"

2、RegExp 对象属性

  global RegExp 对象是否具有标志 g。
  ignoreCase RegExp 对象是否具有标志 i。
  multiline RegExp 对象是否具有标志 m。

  lastIndex 一个整数,标示开始下一次匹配的字符位置。(上一次匹配文本之后的第一个字符的位置)

  (1)不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。
  (2)如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0。
  (3)当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

  source 正则表达式的源文本,不包括i、g、m。/

3、RegExp 对象方法

  compile 在 1.5 版本中已废弃。 编译正则表达式。 (不掌握)

  exec 检索字符串中指定的值。返回一个数组 或 null。数组中元素第一个是匹配到的值,后面的都是子表达式的值(如果存在子表达式)。
   (1)如果没有子表达式,那么返回数组只有一个元素。
       如果有了子表达式,那么从第二个元素开始为依次匹配到的字表达式结果的值。
   (2)一次只匹配一个值,如果要全局匹配,需要循环调用exec。
      var str = "Visit W3School, W33Sdf45c32h1ool is a place to study web techno34logy.";
      var patt = new RegExp("\\d{2}","g");
      var result;
      while ((result = patt.exec(str)) != null) {
        document.write("result = "+result +" lastIndex = "+patt.lastIndex);
        document.write("<br />");
      }
   (3)循环中反复地调用 exec() 方法是获得全局模式的完整模式匹配信息唯一的方法。

  test 检索字符串中指定的值。返回 true 或 false。 等价于:(pattern.exec(str) != null)。
    一般校验字段都使用开始和结束符来做全局匹配。比如/^\d{11}$/
    全局匹配g的使用:每执行一次test方法 lastIndex会改变- 貌似没啥作用。
      var str = "The rain in Spain stays mainly in the plain";
      var patt1 = new RegExp("ain", "g");

                    for(i = 0; i < 4; i++) {

        document.write(patt1.test(str)+" - ");
        document.write("index now at: " + patt1.lastIndex);
        document.write("<br />");
      }

  toString 返回正则表达式的字符串。

 

4、String 对象的相关方法

  search 找到第一个匹配的字符串,返回子串的起始位置索引或-1。(不执行全局匹配,它将忽略标志g)

  match 找到一个或多个正则表达式的匹配,返回匹配到的数组或null。 (默认只匹配一次,全局匹配设置修饰符g)

    regexp 必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。
      如:str.match(/aa/i);
        str.match(new RegExp(/aa/i);全局匹配aa
        str.match("/aa/i"); 注意:这里匹配的是匹配/aa/i,会转换成RegExp对象,可以看出没法设置修饰符i、g。

    对于子表达式的情况
      如果有全局g标识,那么不返回子表达式匹配的文本。比如返回[13522222222,13288888888,13699999999] ,如要返回可以使用 RegExp.exec()

      如果没有全局g标识,那么返回子表达式匹配的文本。比如返回[13522222222,5,22222222]
      

        var objStr="我的手机号13522222222,他的手机号13288888888,她的手机号码13699999999";
        var reg=/13(\d)(\d{8})/;
        var arr=objStr.match(reg);
        //循环输出结果
        for(var i=0;i<arr.length;i++){
          document.write("<li>"+arr[i]+"<br>");
        }

  

  replace 替换与正则表达式匹配的子串,全局替换要加g。
      str = "Visit Microsoft! Microsoft";
      var txt = str.replace(/microsoft/ig,"Runoob");

 

    (1)存在子表达式时,可以利用下面的符号

                $1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
      $& 与 regexp 相匹配的子串。
      $` 位于匹配子串左侧的文本。
      $‘ 位于匹配子串右侧的文本。
      $$ 直接量符号

         如 :  把 "Doe, John" 转换为 "John Doe" 的形式:
              name = "Doe, John";
              name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

    (2)用来替换的值可以是函数

       例如下面例子实现首字母都大写aaa bbb ccc变成Aaa Bbb Ccc

        name = ‘aaa bbb ccc‘;
     uw=name.replace(/\b\w+\b/g, function(word){
         return word.substring(0,1).toUpperCase()+word.substring(1);}
     );

                      
  split 把字符串分割为字符串数组,支持字符串和正则表达式。
    string.split(separator,limit)
    var n=str.split(" ",3); 以空格分割,最多只返回大小为3的数组。
    var n=str.split(""); 这种每个字符都会分割

js正则表达式

标签:ali   pre   visit   构造函数   应该   john   相关   字符串数组   bbb   

原文地址:https://www.cnblogs.com/caoshouling/p/12228532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!