RegExp构造函数的相关属性

提出问题

  • 相关代码
var text = "this has been a short summer";
var pattern = /(.)hort/g;

if (pattern.test(text)){
    console.log(RegExp.input);          // this has been a short summer
    console.log(RegExp.leftContext);    // this has been a
    console.log(RegExp.rightContext);   // summer
    console.log(RegExp.lastMatch);      // short
    console.log(RegExp.lastParen);      // s
    console.log(RegExp.multiline);      // false
}
  • 问题描述

if下面六条语句分别是RegExp构造函数所包含的属性,前五个都可以正常输出,但是最后一条在使用multiline的时候用google浏览器chorm输出会出现undefined的情况,并不能如常输出false,问题在此。

相关知识点

RegExp构造函数包含相关属性包含以上几种:

长属性名短属性名相关说明
input$_距离代码中最近的要匹配的字符串。Opera未实现此属性
lastMatch$&距离代码中最近的一次匹配项,Opera未实现此属性
lastParen$+距离代码中最近的一次匹配的捕获组(即代码中你要求匹配的位置当时要求的那个字符)。Opera未实现此属性
leftContext$`input字符串中lastMatch之前的文本
multiline$*布尔值,表示是否所有表达式都是用多行模式。IE和Opera未实现此属性
rightContext$’Input字符串中lastMatch之后的文本

(注意在使用短属性名的时候需要加方括号括和引号【“ ”】括住来使用,因为短属性名不是js所能识别的标识符)

在属性介绍之后,着重介绍multiline这个属性。multiline这个属性表明正则表达式是否使用了”m”标志。multiline是正则表达式实例的一个只读属性。

multiline是一个布尔对象,如果使用了“m”标志,则返回true;否则,返回false。“m”标志意味着一个多行输入字符串被看做多行。
引入一个例子:

var regex = new RegExp("foo", "m")
console.log(regex.multiline) // true

此时在RegExp中使用了对“m”的标志,所以相当于去在下面运用multiline这个属性的过程中已经定义了“m”,所以返回值应该是ture。

结论

所以说在使用RegExp的六个属性:input,lastMatch,lastParen,leftContext,rightContext和multiline。但是最后一个multiline其实和另外两个属性global,ignorecase是同一级别的定义,在使用之前都需要定义。详细理解请看下面的例子:

var str='Hello This World';
var pattern=/hello/gi;
var result=str.match(pattern);
    console.log(result);   / "Hello"
var str='Hello This World';
var pattern=/Hello/;
var result=str.match(pattern);
    console.log(result); /"Hello", index: 0, input: "Hello This World"
var str='Hello This World';
var pattern=/hello/g;
var result=str.match(pattern);
    console.log(result);        / null
var text = "this has been a short summer";
var pattern = /(.)hort/g;
if (pattern.test(text)){
    console.log(RegExp.input);        /this has been a short summer
    console.log(RegExp.leftContext);  /this has been a 
    console.log(RegExp.rightContext); /summer
    console.log(RegExp.lastMatch);    /short
    console.log(RegExp.lastParen);    /s
    console.log(RegExp("b","m").multiline);  /true
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值