宇宙级正则表达式教程,请注意查收

严肃而郑重的介绍

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),能够用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式

一个字符串中要匹配 is ,这时候,咱们须要页面中只要是有is的单词也会被匹配,\bis\b意思是,is先后含有单词边界。express

路径中,如http://.*.jpg 匹配全部以http开头,文件名和路径随意,.jpg结尾的路径名称。 分组的概念:(http://.*.jpg) 获取匹配到的值 $1数组

再例如时间日期:\d{4}/\d{2}/\d{2},其中{...}表示量词,这时候,有时/是-,那么要进行或逻辑[/-]表示或 改善之后的正则:\d{4}[/-]\d{2}\d{2}函数

在JavaScript中实例化一个正则对象两种方式

  • 字面量:/\bis\b/gi
  • 构造函数:new RegExp(\bis\b,'gi');

修饰符

  • g,全局进行查找,若是不指定该修饰符,则会匹配到第一个知足条件的元素后返回
  • i,忽略大小写
  • m,multiple lines 多行搜索

元字符

  • 原意文本字符 a b c 就直接匹配字母
  • 元字符 \b \t等 有特殊含义的字符\b匹配 单词边界
  • 几个特殊字符: * + ? $ ^ | \ () {} [] \t(水平制表符) \v(垂直制表符) \n(换行符) \r(回车符) \0(空字符) \f(换页符) \cX(与X对应的控制字符[ctrl+x])

字符类

引入:咱们有时想匹配一个几个字母,ab\t -> ab+tab,但有时,咱们想要泛指匹配某一类字符,这时候就须要类的概念,可使用元字符[]来构建一个简单的类,a1b1c1d1.replace(/[abc]/g,'YES');好比:YES1YES2YES3d4(只匹配a或b或c)测试

字符取反,a1b1c1d1.replace(/[^abc]/g,'YES');好比:aYESbYES...(除了abc,其余所有匹配)prototype

范围类

  • 字母 [a-zA-Z]
  • 数字 [0-9]
  • [-/]

预约义类及边界

  • . == [^\r\n] 除了回车和换行符之外的全部字符
  • \d == [0-9] 数字
  • \D == [^0-9] 非数字
  • \s == [\t\n\x0b\f\r] 空白字符
  • \S == [^\t\n\x0b\f\r] 非空字符
  • \w == [a-zA-Z_0-9] 单词字符
  • \W == [^a-zA-Z_0-9] 非单词字符

量词

量词放置在{}中3d

  • ?(最多出现一次)
  • +(至少出现一次)
  • *(出现任意次-->这个必定要注意,和Linux不同,他只是一个量词,不是想Linux中表示任意的字符,正则中任意字符用"."表示)
  • {n} {n,m} {n,}

贪婪模式与非贪婪模式对象

  • \d{1,5} 他会尽量多的去匹配,这叫作贪婪模式匹配,若是咱们不想这样,引入一个非贪婪模式概念
  • \d{1,5}? 在量词后边儿加"?"

分组

分组放置于()中,这个很好理解,就像是数学中的运算,将括号中的元素当成一个总体.hello{2} --> helloo ; (hello){2} -->hellohello;(a|b|c|d)索引

  • 反向引用:就是在结果中但愿使用咱们的分组中的原始结果,$1,$2分别表示第一个分组,第二个分组...
  • 忽略分组:固然又有了第二个问题,有些咱们只是起一个优先计算或者做为总体的目的而并不想做为一个分组group,只用加上 (?:)

前瞻、后顾(js不支持后顾)

符合和不符合特定断言的称为(确定/正向)匹配和(否认/负向)匹配ip

  • 正向前瞻 exp(?=assert)
  • 正向后顾 exp(?<=assert)
  • 负向前瞻 exp(?!assert)
  • 负向后顾 exp(?<!assert)

前瞻是向后看,这一点不少人会比较犯糊涂,例如: \d{2}(?=\w{2}) 匹配形如 12aa中的aa.

JavaScript中RegExp对象

对象属性:global(g) ignore case(i) multiline(m)默认值全是false。

  • lastIndex:当前表达式匹配内容的最后一个字符的下一个位置,在非全局g下,始终返回0.
  • source:正则表达式的文本字符串 \w 那么reg.source就是 \w,这些属性是只读的.

对象的方法

  • RegExp.prototype.test()
  • RegExp.prototype.exec()

test(): /\w/ 若是加上g参数,不停console.log(reg.test('ab')),第三次会错 这就是lastIndex在做怪,1 , 2.其实咱们测试时,没有必要g,弄明白每一个元素坐标位置

exec(): /\d(\w)/ 匹配上会返回一个结果数组,第一个参数返回匹配结果,后面参数依次是子表达式所匹配的内容,就是咱们以前使用的$1,$2... res.index 返回每结果的索引

字符串与之类似方法

String.prototype.search(reg): 检索知足正则的第一个子表达式,search忽略 g 标志,始终从头开始返回最前一个 String.prototype.match(reg): 非全局调用,返回值和RegExp的exec所返回的一致 忽略 g lastIndex返回0,有两个属性: index和input属性

String.prototype.split(reg)

String.prototype.replace(str/reg,repStr)

String.prototype.replace(str/reg,function(a,b,c,d){})

  • a:匹配字符串
  • b:正则表达式分组内容,没有分组则没有该参数,有的话 分组存在多个 则该参数有多个
  • c:匹配项在字符串中的index
  • d:元字符串
相关文章
相关标签/搜索