# RegExp


RegExp 构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配。

# 基本语法

/pattern/flags
new RegExp(pattern [, flags])
RegExp(pattern [, flags])
1
2
3

# flags: 范围,可由以下值进行搭配组合

flags 含义
g 全局匹配;找到所有匹配,而不是在第一个匹配后停止
i 忽略大小写
m 多行; 将开始和结束字符(^和$)视为在多行上工作.也就是,分别匹配每一行的开始和结束(由 \n 或 \r 分割)而不只是只匹配整个输入字符串的最开始和最末尾处。
u Unicode; 将模式视为Unicode序列点的序列
y 粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(并且不尝试从任何后续的索引匹配)。

# pattern: 正则表达式的文本。可以由以下类型组合

  • 字符类别
  • 字符集合
  • 边界
  • 分组与反向引用
  • 数量词
  • 断言

# 字符类别

字符 含义 例子
. 匹配任意单个字符 /.y/ 匹配 "yes make my day" 中的 "my" 和 "ay",但是不匹配 "yes"
\d 匹配任意阿拉伯数字。等价于[0-9], /\d/ 或 /[0-9]/ 匹配 "B2 is the suite number." 中的 '2'
\D 匹配任意一个不是阿拉伯数字的字符。等价于[^0-9], /\D/ 或 /[^0-9]/ 匹配 "B2 is the suite number." 中的 'B'
\w 匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 [A-Za-z0-9_]; /\w/ 匹配 "apple" 中的 'a',"$5.28" 中的 '5' 和 "3D" 中的 '3'
\W 匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 [^A-Za-z0-9_]; /\W/ 或 /[^A-Za-z0-9_]/ 匹配 "50%" 中的 '%'
\s 匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格 /\s\w*/ 匹配 "foo bar" 中的 ' bar'
\S 匹配一个非空白符。 /\S\w*/ 匹配 "foo bar" 中的 'foo';例如,/\S\w*/ 匹配 "foo bar" 中的 'foo'。
\t 匹配一个水平制表符(tab)
\r 匹配一个回车符(carriage return)
\n 匹配一个换行符(linefeed)
\f 匹配一个换页符(form-feed)

# 字符集合

字符 含义 例子
[xyz] 一个字符集合,也叫字符组。匹配集合中的任意一个字符。也可以使用连字符'-'指定一个范围 [abcd] 等价于 [a-d],匹配"brisket"中的'b'和"chop"中的'c'
[^xyz] 一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符 '-' 指定一个范围内的字符 [^abc] 等价于 [^a-c]。 第一个匹配的是 "bacon" 中的'o' 和 "chop" 中的 'h'

# 边界

字符 含义 例子
^ 匹配输入开始。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符后的开始处 /^A/ 不匹配 "an A" 中的 "A",但匹配 "An A" 中的 "A"
$ 匹配输入结尾。如果多行(multiline)标志被设为 true,该字符也会匹配一个断行(line break)符的前的结尾处。 /t$/ 不匹配 "eater" 中的 "t",但匹配 "eat" 中的 "t"
\b 匹配一个零宽单词边界,如一个字母与一个空格之间。 (不要和 [\b] 混淆 /\bno/ 匹配 "at noon" 中的 "no",/ly\b/ 匹配 "possibly yesterday." 中的 "ly"。
\B 匹配一个零宽非单词边界,如两个字母之间或两个空格之间 /\Bon/ 匹配 "at noon" 中的 "on",/ye\B/ 匹配 "possibly yesterday." 中的 "ye"。

# 分组与反向引用

字符 含义 例子
(x) 匹配 x 并且捕获匹配项。 这被称为捕获括号 /(foo)/ 匹配且捕获 "foo bar." 中的 "foo"
\n n 是一个正整数。一个反向引用,指向正则表达式中第 n 个括号(从左开始数)中匹配的子字符串 /apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"

# 数量词

字符 含义 例子
x* 匹配前面的模式 x 0 或多次 /bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"
x+ 匹配前面的模式 x 1 或多次。等价于 {1,} /a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"
x? 匹配前面的模式 x 0 或 1 次 /e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"
x|y 匹配 x 或 y /green
x{n} n 是一个正整数。前面的模式 x 连续出现至少 n 次时匹配 /a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"
x{n,m} n 和 m 为正整数。前面的模式 x 连续出现至少 n 次,至多 m 次时匹配。 /a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"

# 断言

字符 含义 例子
x(?=y 仅匹配被y跟随的x /Jack(?=Sprat)/,如果"Jack"后面跟着sprat,则匹配之;/Jack(?=Sprat
x(?!y 仅匹配不被y跟随的x /\d+(?!.)/ 只会匹配不被点(.)跟随的数字。/\d+(?!.)/.exec('3.141') 匹配"141",而不是"3.141"
上次更新: 3/4/2019, 2:51:29 PM