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" |