文章标题

来源:互联网 发布:unity3d 地图制作 编辑:程序博客网 时间:2024/06/06 23:52

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之后的文本

在属性介绍之后,着重介绍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