JS_正则表达式模式匹配

一.正则表达式的定义
1.直接量字符
  *需要转义的加"\",不需要的直接使用自身字符
   \t ,\n,\r,\f-换页符,字母和数字字符-自身


2.字符类
   [...]  方括号内的任意字符
   [^...] 不在方括号内的任意字符
   .   除换行符和其他Unicode行终止符之外的任意字符
   \w  任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
   \s  任何Unicode空白符
   \d  任何ASCII数字,等价于[0-9]
   [\b] 退格直接量(特例)


3.重复
   {n,m}  匹配前一项至少n次,但不能超过m次
   {n,}   匹配前一项n次或者更多次
   {n}    匹配前一项n次
    ?    匹配前一项0次或者1次
    +     匹配前一项1次或者多次
    *     匹配前一项0次或者多次


4.选择、分组和引用字符
   |      选择的是该符号左边的子表达式或右边的子表达式
  (...) 组合,将几个项组合为一个单元,这个单元可通过"*"、"+"、"?"和"|"等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供伺候的引用使用
  (?:...) 只组合,把项组合到一个单元,但不记忆与该组相匹配的字符
  \n  和第n个分组第一次匹配的字符相匹配,组是圆括号的子表达式,组索引是从左到右的左括号,"?:"形式的分组不编码


5.锚字符
   ^  匹配字符串的开头在多行检索中,匹配一行的开头
   $  匹配字符串的结尾,在多行检索中,匹配一行的结尾
   \b 匹配一个单词的边界
   (?=p)  零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
   (?!p)  零宽负向先行断言,要求接下来的字符都不与p匹配


6.修饰符
   i  执行不区分大小写的匹配
   g  执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
   m  多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束


二.用于模式匹配的String方法
1.Search()。参数是一个正则表达式(不是,则首先会通过RegExp构造函数将它转换为正则表达式,不支持全局检索),返回第一个与之匹配的子串的起始位置,若无,则返回-1.
  "JavaScript".search(/script/i);  //4


2.replace()。执行检索与替换操作。
  text.replace(/jacascript/gi,"JavaScript"); //将所有不区分大小写的javascript都替换成大小写正确的JavaScript


3.match()。最常用的String正则表达式。它的唯一参数就是一个正则表达式,返回的是一个有匹配结果组成的数组。
 "1 plus 2 equals 3".match(/\d+/g) //返回["1","2","3"]


  //解析一个URl
  var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
  var text = "Visit my blog at http://www.example.com/~david";
  var result = text.match(url);
   if(result != null){
    var fulurl = result[0];// 包含"http:www.exaple.com/!david";
    var protocol = result[1]; //包含"http;
    var host = result[2]; //包含"www.example.com"
    var path = result[3]; //包含"~david"
  }


4.exec()。给字符串的match()传入一个非全局的正则表达式,实际上两者一样。


5.split()。拆分为一个子串组成的数组。
  "123,456,789".split(","); //返回["123","456","789"]


三.RegExp对象
   RegExp()构造函数带有两个字符串参数,其中第二个参数是可选的,RegExp()用于创建新的RegExp对象。第一个参数包含正则表达式主体部分,必须将"\"替换成"\\".RegExp()的第二个参数可选,只能传入g、i、m或者它们的组合。
    var zipcode = new RegExp("\\d{5}","g");


1.RegExp的属性(5个)。
  *source是一个只读的字符串,包含正则表达式的文本。
  *global是一个只读的布尔值,用于说明这个正则是否带有修饰符g。
  *ignoreCase是一个只读的布尔值,用于说明正则表达式是否带有修饰符i。
  *multiline是一个只读的布尔值,用于说明正则表达式是否带有m。
  *lastIndex是一个可读/写的整数。如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置。(在exec()和test()方法中用到)。


2.方法
   //反复调用exec()
   var pattern = /Java/g;
   var text = "JavaScript is more fun than Java!";
   var result;
   while((result = pattern.exec(text))!=null){
      alert("Matched '"+result[0]+"'"+" at position " + result.index+ ";next search begins at "+pattern.lastIndex);
    }


  //test()
  var pattern /java/i;
  pattern.test("JavaScript"); //返回true

你可能感兴趣的:(前端工程师)