正则表达式 | 青训营笔记

24 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第11天

基础

正则RegExpvar re = /正则表达式/标志

  • 函数实现:var re = new RegExp('正则表达式'[,'标志'])

    • 带“\”的操作符(如“\d”)需要双重转义,即写为“\”
    • 匹配“\”需要改为“\\”
  • 方法:

    • re.test('字符串'):能匹配则返回true,反之返回false
    • re.exec('字符串'):返回包含匹配字符串和分组的类数组,这个数组相当于python的group,匹配失败返回null
  • 标志:

    • g:全局匹配:多次执行exec时,每次从lastIndex开始

      • re.lastIndex:上次匹配到的最后字符的索引+1位置,下次匹配从这开始
    • i:忽略大小写

    • m:多行匹配

    • tips:可同时包含多个参数

  • 字符串中的正则方法:

    • str.search(pattern):匹配到返回则位置,失败返回-1
    • str.match(pattern):同re.exec(),但全局匹配时会返回所有匹配内容,且忽略分组
  • tips:

    • 转换为json类型:var js = JSON.stringify(字典[,数组/函数名,' '])
    • 转换为javascript类型:var jsp = JSON.parse('字符串'[,函数名])

正则表达式

简洁表达一组字符串

作用: 查找、替换、有效性验证

贪婪匹配: 在匹配到时 默认返回最长的字符串,即有多个匹配结果时返回最长的那个;输出最短需在相应操作符后加 ?

\D:非数字,等价[^0-9],\S和\W同理

\s:任意空白字符(如空格),等价于[\n\r\f\t\v](即换行/回车(擦除本行回到行首)/换页/制表/垂直制表)

\b:单词边界,相当于断言,不匹配字符只判断位置

优先级: \ > ()断言[] > *+?{} >^$. > | (相同优先级从左到右运算)

零宽断言

不匹配字符,只用于判断匹配字符位置

  • 先行断言(判断后接的字符):匹配字符(?=表达式)
  • 后行断言(判断前接的字符):(?<=表达式)匹配字符
  • =改为!表示排除

捕获组

  • (?P表达式):匹配含有这个表达式的组,并将其命名为name,可以被group('name')捕获
  • 不捕获分组:(?:表达式)
  • 引用第n个分组作为表达式:\n(n为数字)

Tips

  • 转义字符\:即把有特殊含义的字符转化成字面意思
  • []内不要嵌套[]
  • []中只能匹配单字符,在[]中加()也没用
  • 匹配“.” :[.] 或 .(即让“.”转义)
  • . 在[]里无法表示为任何单字符,只能表示 . 的字面意思
  • [abc]+表示包含abc的单字符及其任何组合,[^abc]+同理 (因为贪婪匹配)
  • 若要匹配的字符里有 [ 等保留字符,则需要用 [ 转义表示(指在r''原生字符串中时,非原生则用\[)
  • {2,}:要匹配的字符至少重复两次,{,2}表至多
  • (ab)+:表示ab至少要连续地出现一次
  • {m,n}逗号后不能有空格,且n可以省略