1)RegExp 构造函数创建了一个正则表达式对象,用于将文本与一个模式匹配。
有关正则的详细内容请阅读 JavaScript指南 中的正则表达式章节。
以下表达式是相等的,字面量,构造函数和工厂符号。
/pattern/flag
new RegExp(pattern [, flag])
RegExp(pattern [, flag])
参数:
pattern:正则表达式的文本。
flag:如果指定,标志可以具有以下值的任意组合。
g
全局匹配;找到所有匹配,而不是在第一个匹配后停止
i
忽略大小写
m
多行; 将开始和结束字符(^和$)视为在多行上工作(也就是,分别匹配每一行的开始和结束(由 \n 或 \r 分割),而不只是只匹配整个输入字符串的最开始和最末尾处。
u
Unicode; 将模式视为Unicode序列点的序列
y
粘性匹配; 仅匹配目标字符串中此正则表达式的lastIndex属性指示的索引(并且不尝试从任何后续的索引匹配)2)在ES5中,RegExp构造函数的参数有两种情况。
第一种是,参数是字符串,这时第二个参数表达式的修饰符(flag)。
var regex = new RegExp('xyz', 'i');
// 等价于
var regex = /xyz/i;
第二种情况是,参数是正则表达式,这时会返回一个原有正则表达式的拷贝。
var regex = new RegExp(/xyz/i);
// 等价于
var regex = /xyz/i;
但是,ES5不允许此时使用第二个参数添加修饰符,否则会报错。
var regex = new RegExp(/xyz/, 'i');
// Uncaught TypeError: Cannot supply flags when constructing one RegExp from another
ES6 改变了这种行为,如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且返回的正则表达式会忽略原有的正则表达式修饰符,只使用新指定的修饰符。要在表达式后面加上 .flags。
new RegExp(/abc/ig, 'i').flags
// "i"
上面代码中,原有正则对象的修饰符是 ig ,它会被第二个参数 i 覆盖。