转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp
RegExp
构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配。
有关正则表达式的介绍,请阅读 JavaScript指南中的正则表达式章节。
语法
字面量, 构造函数和工厂符号都是可以的:
/pattern/flags new RegExp(pattern [, flags]) RegExp(pattern [, flags])
参数
pattern
- 正则表达式的文本。
flags
-
如果指定,标志可以具有以下值的任意组合:
g
- 全局匹配;找到所有匹配,而不是在第一个匹配后停止
i
- 忽略大小写
m
- 多行; 将开始和结束字符(^和$)视为在多行上工作(也就是,分别匹配每一行的开始和结束(由 或 分割),而不只是只匹配整个输入字符串的最开始和最末尾处。
- u
- Unicode; 将模式视为Unicode序列点的序列
y
- 粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(并且不尝试从任何后续的索引匹配)。
描述
有两种方法来创建一个RegExp对象:一是字面量、二是构造函数。要指示字符串,字面量的参数不使用引号,而构造函数的参数使用引号。因此,以下表达式创建相同的正则表达式:
/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');
当表达式被赋值时,字面量形式提供正则表达式的编译(compilation)状态,当正则表达式保持为常量时使用字面量。例如当你在循环中使用字面量构造一个正则表达式时,正则表达式不会在每一次迭代中都被重新编译(recompiled)。
而正则表达式对象的构造函数,如 new RegExp('ab+c')
提供了正则表达式运行时编译(runtime compilation)。如果你知道正则表达式模式将会改变,或者你事先不知道什么模式,而是从另一个来源获取,如用户输入,这些情况都可以使用构造函数。
从ECMAScript 6开始,当第一个参数为正则表达式而第二个标志参数存在时,new RegExp(/ab+c/, 'i')不再抛出TypeError
(“当从其他正则表达式进行构造时不支持标志”)的异常,取而代之,将使用这些参数创建一个新的正则表达式。
当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 )。比如,以下是等价的:
var re = new RegExp("\w+");
var re = /w+/;
正则表达式中特殊字符的含义
- 字符类别(Character Classes)
- 字符集合(Character Sets)
- 边界(Boundaries)
- 分组(grouping)与反向引用(back references)
- 数量词(Quantifiers)
- 断言(Assertions)
字符类别(Character Classes) | |
---|---|
字符 | 含义 |
. |
(点号,小数点) 匹配任意单个字符,但是行结束符除外: 在字符集中,点( . )失去其特殊含义,并匹配一个字面点( . )。 需要注意的是, 例如, |
d |
匹配任意阿拉伯数字。等价于 例如, |
D |
匹配任意一个不是阿拉伯数字的字符。等价于 例如, |
w |
匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 例如, |
W |
匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 例如, |
s |
匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。 等价于 例如 |
S |
匹配一个非空白符。等价于 例如, |
|
匹配一个水平制表符(tab) |
|
匹配一个回车符(carriage return) |
|
匹配一个换行符(linefeed) |
v |
匹配一个垂直制表符(vertical tab) |
f |
匹配一个换页符(form-feed) |
[] |
匹配一个退格符(backspace)(不要与 混淆) |
|