JS RegExp的实例属性(成员属性)和静态属性

正则表达式 RegExp 类型拥有多个实例属性(也叫成员属性)和静态属性,通过它们能够了解正则表达式的一些情况。

RegExp 实例属性

每个正则表达式对象都包含一组属性,说明如表所示。

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 类型包含一组静态属性,通过 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 实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果

示例1

下面示例演示了 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”

执行匹配操作后,各个属性的返回值说明如下:

  • input 属性记录操作的字符串:“JavaScript, not JavaScript”。
  • leftContext 属性记录匹配文本左侧的字符串在第一次匹配操作时,左侧文本为空。而 rightContext 属性记录匹配文本右侧的文本,即为“,not JavaScript”。
  • lastMatch 属性记录匹配的字符串,即为“JavaScript”。
  • lastParen 属性记录匹配的分组字符串,即为“Java”。

如果匹配模式中包含多个子模式,则最后一个子模式所匹配的字符就是“RegExp.lastParen”。

var r = /(Java)(Script)/gi;
var a = r.exec(s);  //执行匹配操作
console.log(RegExp.lastParen);  //返回字符串“Script”,而不再是“Java”。

示例2

针对上面示例也可以使用短名来读取相关信息。

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”

这些属性的值都是动态的,在每次执行匹配操作时,都会被重新设置。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23091.html

(0)
上一篇 2021年7月20日
下一篇 2021年7月20日

相关推荐

发表回复

登录后才能评论