Swift51.com
麦子学院 头像
麦子学院  2017-06-22 16:40

JavaScript学习之引用类型RegExp详解

回复:0  查看:2444  
本文和大家分享的主要是javascript 的引用类型RegExp相关内容,一起来看看吧,希望对大家 学习javascript有所帮助。
  ·  字面量
   var  reg=/\d+/g;
  console.log( reg.test("789456"));//true
  ·  构造函数
   var reg2= new RegExp("\\d+","g");console.log(reg2.test("1234444456"));//trueconsole.log(reg2.test("asdsa"));//false
   修饰符
  ·  i  表示不区分大小写(case-insensitive )模式,即在确定匹配项时忽略模式与字符串的大小写;
  ·  m  表示多行(multiline )模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模 式匹配的项。
  ·  g  表示全局(global )模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即 停止;
   元字符
  ·  单个字符数字
  · .  匹配除换行符以外的任意字符
  · [a-zA-Z0-p]  与  [^a-zA-Z0-p]  匹配方括号中的任意字符,前面代 ^ 是匹配不在方括号中的任意字符;
  · \d  与  \D  匹配数字和匹配非数字;
  · \w  与  \W  匹配字符和匹配非字母
  ·  空白字符
  · \O  匹配 null 字符
  · \b  匹配空格字符
  · \f  匹配换页符
  · \n  匹配换行符
  · \r  匹配回车符
  · \s  和  \S  匹配空白字符,空格、制表符或换行符。大写的 S 是匹配非空字符
  · \t  匹配制表符
  ·  定位符
  · ^  行首匹配
  · $  行尾匹配
  · \A  只匹配字符串的开始处
  · \b \B  匹配单词便捷,词在 [] 内无效,匹配非单词边界
  · G  匹配当前搜索的开始位置
  · \Z \z  匹配字符串结束处或行尾,只匹配字符串结束处
  ·  限定符
  · x?  匹配 0 个或一个 x
  · x*  匹配 0 个或者任意多个 x
  · x+  匹配一个或者多个
  · x{m,n}  匹配 m-n x
  ·  分组
  · (?:x)  匹配 x 但不记录匹配结果(匹配不捕获)
  · x(?=y)  x 后面接 y 时匹配 x
  · x(?!y)  x 后不是 y 时匹配 x
  ·  引用
  · \1…\9 $1…$9  返回就割在模式匹配期间找到的,最近保存的部分
  ·  或模式
  · x|y|z  匹配 x 或者 y 或者 z
   属性
   实例属性
  RegExp  的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
  · global :布尔值,检测是走设置 g 标记
  · ignoreCase :布尔值,检测是否设置 i 标记
  · nultiline : 布尔值,检测是否设置了 m 标记
  · lastIndex : 整数,表示开始搜索下一个匹配项的字符位置,从  算起。
  · source  返回正则表达式的字符串表示 , 按照字面量形式而非传入构造函数中的字符串模式返回。
  通过这些属性可以获知一个正则表达式的各方面信息,但却没有多大用处,因为这些信息全都包含在模式声明中。
   var pattern1 = /\[bc\]at/i;console.log(pattern1.global); //falseconsole.log(pattern1.ignoreCase); //trueconsole.log(pattern1.multiline); //falseconsole.log(pattern1.lastIndex); //0console.log(pattern1.source); //"\[bc\]at" var pattern2 =  new RegExp("\\[bc\\]at", "i");console.log(pattern2.global); //falseconsole.log(pattern2.ignoreCase); //trueconsole.log(pattern2.multiline); //falseconsole.log(pattern2.lastIndex); //0console.log(pattern2.source); //"\[bc\]at"
  尽管第一个模式使用的是字面量,第二个模式使用了 RegExp  构造函数,但它们的 source  属性是相同的。可见,  source  属性保存的是规范形式的字符串,即字面量形式所用的字符串。
   构造函数属性
  · $_ input  返回最近一次匹配的字符串
  · $& lastMatch  返回最近一次的匹配项
  · $+ lastParen  返回最近一次匹配的捕获组
  · $` leftContext  返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符
  · $’ rightContext  返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符
  · $* multiline  检测表达式是否采用多行匹配 m
   方法
   实例方法
  test() 方法在字符串中检测模式匹配,返回 true false
   var re = null, i;
   for (i = 0; i < 10; i++) {
  re = /cat/g;
  console.log(re.test("catastrophe")); //true
  }
   for (i = 0; i < 10; i++) {
  re =  new RegExp("cat", "g");
  console.log(re.test("catastrophe")); //true
  }
  RegExp  对象的主要方法是  exec() ,该方法是专门为捕获组而设计的。 exec() 接受一个参数,即 要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回  null 。 返回的数组虽然是  Array  的实例,但包含两个额外的属性: index 和  input 。其中, index  表示匹配 项在字符串中的位置,而  input  表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配 的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
   var text = "cat, bat, sat, fat"; var pattern1 = /.at/; var matches = pattern1.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern1.lastIndex); //0
  matches = pattern1.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern1.lastIndex); //0
   var pattern2 = /.at/g; var matches = pattern2.exec(text);console.log(matches.index); //0console.log(matches[0]); //catconsole.log(pattern2.lastIndex); //3
  matches = pattern2.exec(text);console.log(matches.index); //5console.log(matches[0]); //batconsole.log(pattern2.lastIndex); //8
  第一个模式 pattern1  不是全局模式,因此每次调用  exec()  返回的都是第一个匹配项(  “cat”  )。而第二个模式  pattern2  是全局模式,因此每次调用  exec()  都会返回字符串中的下一个匹配项,直至搜索到字符串末尾为止。此外,还应该注意模式的  lastIndex  属性的变化情况。在全局匹配模式下,  lastIndex  的值在每次调用  exec()  后都会增加,而在非全局模式下则始终保持不变。
   字符串方法
  · match  找到一个或者多个正则表达式的匹配
  · replace  替换与正则表达式匹配的子串
  · search  检索与正则表达式匹配的值
  · split  把字符串分割为字符串数组
来源: liuguoquan727