您当前的位置:首页 > 网站建设笔记 >

javascript RegExp构造函数属性

0

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

长属性名短属性名说明
input$_最近一次要匹配的字符串
lastMatch$&最近一次的匹配项
lastParen$+最近一次匹配的捕获组
leftContext$`input字符串中lastMatch之前的文本
rightContext$'Input字符串中lastMatch之后的文本
multiline$*布尔值,表示是否所有表达式都使用多行模式

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

<script type="text/javascript">
var text="this has been a short summer";
var pattern=/(.)hort/g;
if(pattern.test(text)){
	ADS.log.write(RegExp.input);
	ADS.log.write(RegExp.leftContext);
	ADS.log.write(RegExp.rightContext);
	ADS.log.write(RegExp.lastMatch);
	ADS.log.write(RegExp.lastParen);
	ADS.log.write(RegExp.multiline);
}
</script>

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

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

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

<script type="text/javascript">
var text="this has been a short summer";
var pattern=/(.)hort/g;
if(pattern.test(text)){
	ADS.log.write(RegExp.$_);
	ADS.log.write(RegExp["$`"]);
	ADS.log.write(RegExp["$'"]);
	ADS.log.write(RegExp["$&"]);
	ADS.log.write(RegExp["$+"]);
	ADS.log.write(RegExp["$*"]);
}
</script>

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

<script type="text/javascript">
var text="this has been a short summer";
var pattern=/(..)or(.)/g;
if(pattern.test(text)){
	ADS.log.write(RegExp.$1);
	ADS.log.write(RegExp.$2);
}
</script>

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

顶部中部底部