RegExp 对象
最后更新于:2022-04-02 03:25:16
[TOC]
## 概述
```
var regex = /xyz/; //推荐
//等价
var regex = new RegExp('xyz');
//当表达式需要拼接时使用
var regex = /xyz/i;
// 等价
var regex = new RegExp('xyz', 'i');
```
## 实例属性
* **RegExp.prototype.ignoreCase**:返回一个布尔值,表示是否设置了`i`修饰符。
* **RegExp.prototype.global**:返回一个布尔值,表示是否设置了`g`修饰符。
* **RegExp.prototype.multiline**:返回一个布尔值,表示是否设置了`m`修饰符。
* **RegExp.prototype.lastIndex**:返回一个整数,表示下一次开始搜索的位置。该属性可读写,但是只在进行连续搜索时有意义
* **RegExp.prototype.source**:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
```
var r = /abc/igm;
r.ignoreCase // true
r.global // true
r.multiline // true
r.lastIndex // 0
r.source // "abc"
```
## RegExp.prototype.test() 判断是否匹配,返回布尔
```
/cat/.test('cats and dogs') // true
```
只有带`g`修饰符的才`lastindex` 才有意义
```
var r = /x/g;
var s = '_x_x';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
```
## RegExp.prototype.exec() 返回匹配结果
```
/wo/.exec('helo word');//[ 'wo', index: 5, input: 'helo word', groups: undefined ]
/wo/.exec('helo wprd');//null
```
## 字符串的实例方法
### String.prototype.match() 返回匹配结果
```
var s = '_x_xxx';
var r1 = /x+/g;
s.match(r1);//[ 'x', 'xxx' ]
```
### String.prototype.search() 返回第一个匹配的位置,无匹配则返回-1
```
'__x_xxx'.search(/xxx/);//4
```
### String.prototype.replace() 替换匹配的值
如果不加`g` 则匹配所有
```
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/, 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb"
```
replace方法的第二个参数还可以是一个函数
```
'3 and 5'.replace(/[0-9]+/g, function (match) {
return 2 * match;
}) //6 and 10
```
第二参数的可追加多个参数
网页模板替换的例子
```
var prices = {
'p1': '$1.99',
'p2': '$9.99',
'p3': '$5.00'
};
var template = ''
+ ''
+ '';
template.replace(
/()(<\/span>)/g,
function(match, $1, $2, $3, $4){
return $1 + $2 + $3 + prices[$2] + $4;
}
);//"$1.99$9.99$5.00"
```
### String.prototype.split() 按正则分割
';