您的位置:首页 > Web前端 > JavaScript

JS_正则表达式模式匹配

2017-11-29 20:08 267 查看
一.正则表达式的定义

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript