js笔记(三)--正则表达式

来源:互联网 发布:freebsd mysql 编辑:程序博客网 时间:2024/05/16 05:52

正则表达式是规定字符串中字符出现规律的规则。一般用于查找、验证、替换、切割字符串。

1. 正则表达式基本语法:

  1. 备选字符集:

      一个备选字符集,只能规定一位字符,用[]括起来,例如:[abc],[a-z]            表示除别字符外所有字符均可:^除掉字符
  2. 预定义字符集:对常用字符集的简写方式

      \d: 1位数字 [0-9]  \w: 1位数字,字母或下划线 [0-9a-zA-Z_]  \s: 1位空字符:空格 tab 回车换行   .: 1位任意字符,除回车换行外
  3. 数量词:规定一个字符集出现次数的量词,紧跟字符集之后,修改相邻的前一个字符集
    1. 确定数量(3种):

      {m,n} 最少m个,最多n个    {m,}  m个以上    {m}   必须m个

    2.不确定数量(3种):

      ?: 可有可无,最多一个  *: 可有可无,多了不限  +: 至少一个,多了不限
  4. 选择和分组:

    分组: (子表达式)选择:或   表达式1|表达式2手机号:(\+86|0086)?\s*1[34578]\d{9}身份证号:15位数字,2位数字,从数字、x、X中选一个,后两部分整体可有可无,最多一次        \d{15}(\d\d[0-9xX])?
  5. 指定匹配位置:

    ^:开头位置的xxx,专用在表达式开头$:结尾位置的xxx,专用在表达式结尾比如:^\s+ 匹配开始位置的所有空字符     \s+$ 匹配结尾位置的所有空字符     ^\s+|\s+$ 匹配开头或结尾的空字符前加^后加$(不带|):表示从头到尾完整匹配,只要验证格式,都要前加^,后加$ 

    补充:汉字的备选字符集:[\u4e00-\u9fa5]

2. String中支持正则的API:

  1. 查找(4种):

    1. var i=str.indexOf/lastIndexOf("敏感词"[,fromi])

      • 缺点:不支持正则表达式,只能找位置,每次只能找一个敏感词
      • 优点:可指定开始查找的位置
      • 何时使用:敏感词固定时,且仅获得位置时
    2. var i=str.search(/正则表达式/)——如果没找到返回-1

      • 缺点:不支持后缀g,加上也会被忽略;仅返回找到的第一个关键词的位置;不能设置开始位置,无法循环找所有关键词位置;无法返回关键词内容。
      • 优点:支持正则
    3. var arr=str.match(/正则表达式/g)
      如果没找到返回null,先判断不是null,才继续使用,返回值:[关键词1,…]
      默认正则表达式只匹配一个关键词,表达式后+g,让表达式匹配所有关键词

      • 缺点:不加g时不支持设置开始位置,返回值:[0:关键词,index:下标];无法获得每个关键词的位置。
      • 优点:可返回所有匹配关键词的内容
    4. var arr=reg.exec(str);

      • 特点:既可获得关键字内容,又可获得位置;每次只能找下一个敏感词,自动调整下次开始的位置。 如果找到返回一个数组对象:数组的第一个元素保存本次找到的敏感词内容,数组的index属性保存本次找到的敏感词的位置。
  2. 替换:var newStr=str.replace(/正则表达式/g,"替换内容")

    • 删除:将匹配内容替换为""
    • 格式化(2步):
      • 先定义正则表达式,用()分组,每个(),都会得到一个序号:1,2,…
      • 在replace中的替换内容部分,使用$n拼接结果,匹配时,会自动将$n换成本次匹配的实际内容
        比如: var birth="19831226";birth=birth.replace(/(\d{4})(\d{2})(\d{2})/,"$1年$2月$3日");
  3. 切割:var arr=str.split(/分隔符正则表达式/);
    切割结果不包含切割符本身,将字符串打散为字符数组–> var chars=str.split("");

  4. 验证:var bool=reg.test(str);
    强调:只要验证,必须前加^,后加$,表示从头到尾完整匹配
    str符合reg的规则,就返回true,否则返回false

3. RegExp对象:正则表达式对象

封装了一个正则表达式,提供了操作正则表达式的方法

  • 创建正则表达式(2种):

    1. 创建固定正则表达式对象:var reg=/正则表达式/g;
      • 何时使用:如果正则表达式不需要动态生成时
    2. 创建可变正则表达式对象:var reg=new RegExp("正则表达式","后缀");
      • 何时使用:如果正则表达式由变量或字符串动态生成时
      • 强调:所有\都要写成\。比如:”\d{6}”–>”\d{6}”
        后缀:g: 全局/全部, i: 忽略大小写
  • 正则表达式对象的方法(2种):

    1. 查找的第四种方法:var arr=reg.exec(str);

强调:exec每次查找都会重置arr数组内容,上次查找的内容被替换,如果没找到,返回null!
反复查找:

  var arr=null;  while((arr=reg.exec(str))!=null){      arr[0]; //关键字的内容      arr.index; //关键字的位置  }
0 0
原创粉丝点击