正则表达式

92 阅读2分钟

用于规定在文本中检索的内容

风格

  • JS风格:new RegExp("a","i")
  • Perl风格:/a/i

修饰符

  • g:用于查找全部,global的简称
  • i:用于忽略大小写
  • m:允许多行匹配

元字符

区别原义字符,元字符是有特殊含义的非字母字符

  • ·
  • .(点,任意字符)
  • *(量词,任意次,可有可无)
  • +(量词,一次或多次)
  • ?(量词,零次或一次)
  • $(结尾)
  • ^(开头)(反向类,不属于某类的内容[^abc]
  • | (或)
  • /(正则)
  • \(转义)
  • ((捕获分组)
  • )(捕获分组)
  • {(包含量词)
  • }(包含量词)
  • [
  • ]
  • \t 水平制表符
  • \n 换行
  • \0 空字符
  • \v
  • \r 回车符
  • \f 换页符
  • \cX 剪切

范围类

  • [a-z]
  • [A-Z]
  • [0-9]
  • [a-z0-9A-z]

预定义

  • . 等价于[^\r\n]除了回车符和换行符之外所有字符
  • \d 数字
  • \D 非数字
  • \s 空白符space
  • \S 非空白符
  • \w 单词(字母,数字,下划线)
  • \W 非单词

量词

  • ? 零次或一次
  • + 出现一次或多次
  • * 任意次
  • {n} 出现n次
  • {n,m} 最少n次,最多m次
  • {n,} 最少n次,最多不限

属性

  • lastIndex (只在g生效)当前表达式匹配内容的最后一个字符的下一个位置
  • source 正则文本字符串,即/source/ reg.lastIndex

方法

  • test 用于测试字符串参数中间是否存在匹配正则的字符串,返回true或false
  • exec 使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反应匹配结果,返回数组[匹配字符串,分组1,分组2,···]或null
  • search stringObject.search(regexp)返回相匹配的子串的起始位置或-1,search() 方法不执行全局匹配,它将忽略标志 g
  • match stringObject.match(regexp) 非全局调用,返回[匹配文本,分组]或null,index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用;全局调用返回[匹配文本]或null,没有 index 属性或 input 属性
  • split stringObject.split(regexp,howmany)howmany可选。该参数可指定返回的数组的最大长度。返回一个字符串数组,字符串 stringObject 分割成的子串
  • replace stringObject.replace(regexp,replacement/function(str,...分组内容,匹配项在字符串中的index,原字符串){})
  • compile 改变正则表达式 reg1.compile("d")

其他

正则属于贪婪模式,想尽可能多的匹配
?非贪婪模式,只匹配一次就结束/\d{3,5}?/g
前瞻:向前检查是否符合断言->\

// 正向前瞻
exp(?=assert)
/\w(?=\d)/g //匹配第一位为数字或字母,第二位为数字
// 负向前瞻
exp(?!assert)

后顾:与前瞻相反,js不支持后顾