正则表达式

140 阅读2分钟
var r = /123(.)(.)/g

r.lastIndex     // 表示搜索从什么地方开始,每执行一次test或者exec都会更改lastIndex的值
r.flags         // 'g'
r.global        // 布尔值,表示后面的标志是否是g
r.ignoreCase    // 布尔值,表示后面的表示是否是i
r.multiline     // 布尔值,表示后面的表示是否是m
r.source        // 返回模式的字符串表示'123(.)(.)'
r.toString()    // 返回正则对象字面量的字符串表示 '/123(.)(.)/g'

// 声明一个字符串
var s = '123456789'

// 该方法返回一个数组
// 类似于 ['12345', '4', '5']
// 有三个元素,第一个元素是完全模式匹配的字符串
// 后面两个是捕获组匹配的字符串
var result = r.exec(s)

// 返回的数组还具有其它的属性
result.index    // 表示匹配模式的字符串在原字符串的位置
result.input    // 等于传入的字符串

// RegExp内的静态属性
RegExp.input            // 表示最近一次匹配所传入的字符串
RegExp.lastMatch        // 表示最近一次匹配字符串
RegExp.lastParen        // 表示最近一次匹配捕获组的字符串
RegExp.leftContext      // 最近一次完全匹配的字符串之前的字符串
RegExp.rightContext     // 表示最近一次完全匹配的字符全之后的字符串

// RegExp还有很多静态方法:$(1-9),一共9个方法
// 分别表示最近一次匹配到的第1个到第9个的捕获组
RegExp.$1       // 表示第一个捕获组
RegExp.$2       // 以此类推...
RegExp.$3       // ......
RegExp.$4       // ......
RegExp.$5       // ......
RegExp.$6       // ......
RegExp.$7       // ......
RegExp.$8       // ......
RegExp.$9       // ......

// test方法表示传入的字符串是否有匹配的字符串,返回一个布尔值
console.log('lastIndex:', r.lastIndex)
r.test(s)       // 返回false,因为执行之前lastIndex等于5,也就是从第5项才开始搜索

/**重点注意,不管是exectest方法,
 * 只要是同一个正则对象,就会记录匹配字符串的索引值,
 * 在下次调用时会从该索引值开始搜索匹配,
 * 直到搜索到结尾,在下次才开始重新从开头开始搜索,
 * 不管正则对象后面设置的是否是g,每次调用exec都只会返回一个匹配的结果,
 * 同时更改正则对象的lastIndex的值。
 */