正则表达式 RegExp 类型拥有多个实例属性(也叫成员属性)和静态属性,通过它们能够了解正则表达式的一些情况。
每个正则表达式对象都包含一组属性,说明如表所示。
属性 | 说明 |
---|---|
global | 返回 Boolean 值,检测 RegExp 对象是否具有标志 g |
ignoreCase | 返回 Boolean 值,检测 RegExp 对象是否具有标志 i |
multiline | 返回 Boolean 值,检测 RegExp 对象是否具有标志 m |
lastIndex | 一个整数,返回或者设置执行下一次匹配的下标位置 |
source | 返回正则表达式的字符模式源码 |
global、ignoreCase、multiline 和 source 属性都是只读属性。lastIndex 属性可读可写,通过设置该属性,可以定义匹配的起始位置。
下面示例演示了如何读取正则表达式对象的基本信息,以及 lastIndex 属性在执行匹配前后的变化。
var s = "JavaScript"; //测试字符串
var r = /\w/g; //匹配模式
console.log("r.global = " + r.global); //true
console.log("r.ignoreCase = " + r.ignoreCase); //返回true
console.log("r.multiline = " + r.multiline); //返回false
console.log("r.source= " + r.source); //返回a
console.log("r.lastIndex = " + r.lastIndex); //返回0
r.exec(s); //执行匹配操作
console.log("r.lastIndex = " + r.lastIndex); //返回1
RegExp 类型包含一组静态属性,通过 RegExp 对象直接访问。这组属性记录了当前脚本中最新正则表达式匹配的详细信息,说明如表所示。
这些静态属性大部分有两个名字:长名(全称)和短名(简称,以 $ 开头表示)。
长名 | 短名 | 说明 |
---|---|---|
input | $_ | 返回当前所作用的字符串,初始值为空字符串"" |
index | 当前模式匹配的开始位置,从 0 开始计数。初始值为 -1,每次成功匹配时,index 属性值都会随之改变 | |
lastIndex | 当前模式匹配的最后一个字符的下一个字符位置,从 0 开始计数,常被作为继续匹配的起始位置。初始值为 -1,表示从起始位置开始搜索,每次成功匹配时,lastIndex 属性值都会随之改变 | |
lastMatch | $& | 最后模式匹配的字符串,初始值为空字符串""。在每次成功匹配时,lastMatch 属性值都会随之改变 |
lastParen | $+ | 最后子模式匹配的字符串,如果匹配模式中包含有子模式(包含小括号的子表达式),在最后模式匹配中,最后一个子模式所匹配到的子字符串。初始值为空字符串""。在每次成功匹配时,lastParen属性值都会随之改变 |
leftContext | $` | 在当前所作用的字符串中,最后模式匹配的字符串左边的所有内容。初始值为空字符串""。每次匹配成功时,其属性值都会随之改变 |
rightContext | $' | 在当前所作用的字符串中,最后模式匹配的字符串右边的所有内容。初始值为空字符串""。每次匹配成功时,其属性值都会随之改变 |
$1~$9 | $1~$9 | 只读属性,如果匹配模式中有小括号包含的子字符串,$1~$9 属性值分别是第 1 个到第 9 个子模式所匹配到的内容。如果有超过 9 个以上的子模式,$1~$9 属性分别对应最后的 9 个子模式匹配结果。在一个匹配模式中,可以指定任意多个小括号包含的子模式,但 RegExp 静态属性只能存储最后 9 个子模式匹配的结果。在 RegExp 实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果 |
下面示例演示了 RegExp 类型静态属性使用,匹配字符串“JavaScript”。
var s = "JavaScript, not JavaScript";
var r = /(Java)Script/gi;
var a = r.exec(s); //执行匹配操作
console.log(RegExp.input); //返回字符串“JavaScript, not JavaScript”
console.log(RegExp.leftContext); //返回空字符串,左侧没有内容
console.log(RegExp.rightContext); //返回字符串“,not JavaScript”
console.log(RegExp.lastMatch); //返回字符串“JavaScript”
console.log(RegExp.lastParen); //返回字符串“Java”
执行匹配操作后,各个属性的返回值说明如下:
如果匹配模式中包含多个子模式,则最后一个子模式所匹配的字符就是“RegExp.lastParen”。
var r = /(Java)(Script)/gi;
var a = r.exec(s); //执行匹配操作
console.log(RegExp.lastParen); //返回字符串“Script”,而不再是“Java”。
针对上面示例也可以使用短名来读取相关信息。
var s = "JavaScript, not JavaScript";
var r = /(Java)(Script)/gi;
var a = r.exec(s);
console.log(RegExp.$_); //返回字符串“JavaScript, not JavaScript”
console.log(RegExp["$`"]); //返回空字符串
console.log(RegExp["$'"]); //返回字符串“,not JavaScript”
console.log(RegExp["$&"]); //返回字符串“JavaScript”
console.log(RegExp["$+"]); //返回字符串“Script”
这些属性的值都是动态的,在每次执行匹配操作时,都会被重新设置。