ECMAScript 5 —— RegExp 类型(下)

本篇接上篇聊聊 RegExp构造函数属性。

 

四. RegExp构造函数属性

RegExp 构造函数包含一些属性(这些属性在其他语言中被看成是静态属性)。这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。关于这些属性的另一个独特之处,就是可以通过两种方式访问它们。换句话说,这些属性分别有一个长属性名和一个短属性名(Opera 是例外,它不支持短属性名)。下表列出了 RegExp 构造函数的属性。

使用这些属性可以从 exec()或 test()执行的操作中提取出更具体的信息。看下面的例子。

var text = "this has been a short summer";
var pattern = /(.)hort/g;
if (pattern.test(text)) {
    alert(RegExp.input);            // this has been a short summer  
    alert(RegExp.leftContext);      // this has been a
    alert(RegExp.rightContext);     // summer 
    alert(RegExp.lastMatch);        // short 
    alert(RegExp.lastParen);        // s 
    alert(RegExp.multiline);        // false 
}

以上代码创建了一个模式,匹配任何一个字符后跟 hort,而且把第一个字符放在了一个捕获组中。 RegExp 构造函数的各个属性返回了下列值:

  • input 属性返回了原始字符串;
  • leftContext 属性返回了单词 short 之前的字符串,而 rightContext 属性则返回了 short之后的字符串;
  • lastMatch 属性返回最近一次与整个正则表达式匹配的字符串,即 short;
  • lastParen 属性返回最近一次匹配的捕获组,即例子中的 s。

如前所述,例子使用的长属性名都可以用相应的短属性名来代替。只不过,由于这些短属性名大都不是有效的 ECMAScript 标识符,因此必须通过方括号语法来访问它们,如下所示。

var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 
if (pattern.test(text)) {
    alert(RegExp.$_);       // this has been a short summer
    alert(RegExp["$`"]);    // this has been a 
    alert(RegExp["$'"]);    // summer  
    alert(RegExp["$&"]);    // short  
    alert(RegExp["$+"]);    // s  
    alert(RegExp["$*"]);    // false 
}

除了上面介绍的几个属性之外,还有多达 9 个用于存储捕获组的构造函数属性。访问这些属性的语法是 RegExp.$1、RegExp.$2…RegExp.$9,分别用于存储第一、第二……第九个匹配的捕获组。在调用 exec()或 test()方法时,这些属性会被自动填充。然后,我们就可以像下面这样来使用它们。

var text = "this has been a short summer"; 
var pattern = /(..)or(.)/g; 
if (pattern.test(text)) {
    alert(RegExp.$1);     //sh
    alert(RegExp.$2);     //t
}

这里创建了一个包含两个捕获组的模式,并用该模式测试了一个字符串。即使 test()方法只返回一个布尔值,但 RegExp 构造函数的属性$1 和$2 也会被匹配相应捕获组的字符串自动填充。

 

 

好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!

 

转载于:https://www.cnblogs.com/johnvwan/p/9549704.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值