正则表达式一直是开发者容易忽略的知识点,因为它里面各种符合实在是太多了。今天整理一下其相关的基础知识。

正则表达式 - JavaScript | MDN

什么是正则表达式

正则表达式是用于匹配字符串中字符组合的模式。

在JavaScript中,正则表达式也是对象

通常用在以下六个方法中:

  • RegExp.exec
  • RegExp.test
  • String.match
  • String.replace
  • String.search
  • String.split

如何创建一个正则表达式

  • 正则表达式字面量,其由包含在斜杆之间的模式组成 /pattern/flags

正则表达式字面量本质上类似于对象字面量,每次创建就相当于新建了一个正则表达式对象,所以“相同”的两个正则表达式字面量并不相等。

在加载脚本后,正则表达式字面量提供正则表达式的编译。<=当正则表达式不变时,使用此方法可获得更好的性能

  • 调用RegExp对象的构造函数 new RegExp(pattern[, flags])

使用构造函数提供正则表达式的运行时编译。当你知道正则表达式将会改变,或者你不知道模式(例如来自于用户输入),建议使用这种方式。

编写一个正则表达式的模式

  • 简单模式 直接匹配

  • 特殊字符 当你需要搜索一个比直接匹配需要更多条件的匹配时,比如:寻找一个或多个'b',或者寻找空格等。这是我们就需要用到特殊字符:

    • \(使用时需要与字符串本身的转义字符相区分,因为**\在字符串里面也是一个转义字符**)
      • 在非特殊字符之前的反斜杠表示下一个字符是特殊的。
      • 反斜杠也可以将其后的特殊字符,转义为字面量。
    • ^
      • 匹配输入的开始(如果多行标志被设置为true,那么也匹配换行符后紧跟的位置)
      • 当'^'作为第一个字符出现在一个字符集合模式时,它将会有不同的含义(?)
    • $
      • 匹配输入的结束(如果多行标示被设置为true,那么也匹配换行符前的位置)
    • *
      • 匹配前一个表达式 0次或多次 === {0,}
    • +
      • 匹配前一个表达式 1次或多次 === {1, }
    • ?
      • 匹配前一个表达式 0次或其次 === {0, 1}
      • 如果紧跟在任何量词*、+、?或{}的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。=>(贪婪和非贪婪是针对量词来说的吗?)
    • .
      • 匹配除换行符之外的任何单个字符
    • (x)
      • 匹配'x'并且记住匹配项。
      • 括号被称为捕获括号
    • (?:x)
      • 匹配'x'但不记住匹配项
      • 非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式
    • x(?=y)
      • 匹配'x'仅仅当'x'后面跟着'y'
      • 正向肯定查找
    • x(?!y)
      • 匹配'x'仅仅当'x'后面不跟着'y'
      • 正向否定查找
    • x|y
      • 匹配'x'或者'y'
    • {n}
      • n是一个正整数
      • 匹配了前面一个字符/表达式刚好发生了n次
    • {n, m}
      • n和m都是整数
      • 匹配前面的字符/表达式至少n次,最多m次
      • 如果n或者m的值是0,这个值被忽略
    • [xyz]
      • 一个字符集合
      • 匹配方括号中任意字符,包括转义序列
      • 可使用'-'来指定一个字符范围
      • 对于'.'和'*'这样的特殊符号在一个字符集中没有特殊的意义,它们不必进行转义(不过转义也是起作用的)
    • [^xyz]
      • 一个反向字符集
    • [\b]
      • 匹配一个退格(U+0008)
      • 不要和\b混淆了
    • \b
      • 匹配一个词的边界(?)
    • \B
      • 匹配一个非单词边界
    • \cX
      • 当X是处于A到Z之间的字符的时候,匹配字符串中的一个控制符
    • \d
      • 匹配一个数字字符
      • === [0-9]
    • \D
      • 匹配一个非数字字符
      • === [^0-9]
    • \f
      • 匹配一个换页符(U+000C)
    • \n
      • 匹配一个换行符(U+000A)
    • \r
      • 匹配一个回车符(U+000D)
    • \s
      • 匹配一个空白字符,包括空格、制表符、换页符和换行符
      • === [\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
    • \S
      • 匹配一个非空白字符
      • === [^\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
    • \t
      • 匹配一个水平制表符 (U+0009)
    • \v
      • 匹配一个垂直制表符 (U+000B)
    • \w
      • 匹配一个单字字符(字母、数字或者下划线)
      • === [A-Za-z0-9_]
    • \W
      • 匹配一个非单字字符
      • === [^A-Za-z0-9_]
    • \n
    • \0
    • \xhh
    • \uhhhh
    • \v{hhhh}

(本篇完)


书籍推荐