[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 = '<span id="p1"></span>' + '<span id="p2"></span>' + '<span id="p3"></span>'; template.replace( /(<span id=")(.*?)(">)(<\/span>)/g, function(match, $1, $2, $3, $4){ return $1 + $2 + $3 + prices[$2] + $4; } );//"<span id="p1">$1.99</span><span id="p2">$9.99</span><span id="p3">$5.00</span>" ``` ### String.prototype.split() 按正则分割