Regexp 正则

去这里查看详细:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

  1、创建正则有下面几种方式

var regex = /abc(a)/g  //字面量形式
var regex1 = new Regexp('abc', 'ig')
var regex2 = new Regexp(/abc/, 'ig')
var regex3 = new Regexp(/abc/ig)

 2、正则的特殊字符参考前面给出的链接

 3、使用正则表达式

       Regexp对象的方法:

  • exec 它返回一个数组(未匹配到则返回null)
  • test 它返回true或false。

      String的方法:

  • match 它返回一个数组或者在未匹配到时返回null
  • search 它返回匹配到的位置索引,或者在失败时返回-1
  • replace 使用替换字符串替换掉匹配到的子字符串
  • split 使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法

    方法返回的信息,下面第一个是上面exec、match方法返回的信息,第二个表示Regexp对象的信息

4、注意事项

  • 在不加全局g的时候, match和exec返回的结果一样,但是match不改变Regexp对象的lastIndex属性,当加上之后,match返回全部的匹配结果,它包含被匹配到的字符串组成的数组
  • test方法在加上全局标志以后,会像exec一样改变lastIndex属性,并且下一次执行从lastIndex开始 
  • 注意对于所有方法如果传入的不是一个正则表达式,会隐式调用new Regexp()来转换
  • 当我们要匹配特殊字符譬如+*.?除了使用转义符号\还可以使用字符集的方括号[],譬如 [.*+?]
  • 如果我们在正则的前后都分别加上^和$那么字符串必须和该正则一模一样才行,如果不加的话,就代表可以匹配字符串中的一部分符合要求的字符串
  • 注意的是对于字符集[] 一个方括号代表的是一个占位而不是多个
  • 注意当我们使用replace的时候第一个参数为字符串的时候,只匹配一次,因为不是正则表达式不能设置全局匹配g, 而且replace返回的是一个新的字符串,不改变原有的字符串
  • replace第二个参数为字符串时,注意可以使用下面的特殊变量
  • replace第二个参数为函数时, 注意下面该函数的参数,函数的返回值作为替换字符串
  • 注意split的规则为正则的时候,如果含有分组()那么将会保留下来分组信息在返回的数组中,例如:
var myString = "Hello 1 word. Sentence number 2.";
var splits = myString.split(/(\d)/);

console.log(splits);
上例输出:

[ "Hello ", "1", " word. Sentence number ", "2", "." ]
  • 需要注意的是如果含有分组,那么exex和非全局匹配的match返回的数组里面从第二项开始就是每一组匹配到的字符
  • 如果要使用正则对象的属性,务必这样写:
var a = new Regexp()或者 /css/
a.lastIndex

而不是这样

var a = /cscscs/.lastIndex
  • 使用被记住的子匹配 用\n(n=1,2,3....)  在replace中使用$n(n=1,2,3...)

猜你喜欢

转载自blog.csdn.net/Her_smile/article/details/81136434