RegExp 实例继承 Object 的 toLocaleString() 和 toString() 方法都会返回正则表达式的字面量形式的字符串,与如何创建正则表达式的方式无关。 valueOf() 则返回正则表达式字面量本身。
var p=https://www.jb51.net/\[new\]bi/;
p.toLocaleString();// "/\[new\]bi/"
p.toString();// "/\[new\]bi/"
p.valueOf();// /\[new\]bi/
var p=new RegExp('\\[new\\]bi');
p.toLocaleString();// "/\[new\]bi/"
p.toString();// "/\[new\]bi/"
p.valueOf();// /\[new\]bi/
RegExp的构造函数属性:
构造函数本身包含一些属性(静态属性),这些属性适用于作用域中的所有表达式,并且基于所执行的最近一次正则表达式操作而变化。有长属性名(如下代码)和短属性名(即$前缀形式,由于这些符号大多不是有效的ECMAScript标识符,所以不能直接在 RegExp 构造函数上以 "." 的方式访问,而要通过方括号语法来访问)两种方式访问这些属性
/(.)hort/g.exec('this is a short day');// ["short", "s"] //最近一次要匹配的字符串 RegExp.input;// "this is a short day" 或RegExp["$_"]访问; //最近一次的匹配项 RegExp.lastMatch;// "short" 或RegExp["$&"]访问; //在最近一次要匹配的字符串中的最近一次匹配项之前的文本 RegExp.leftContext;// "this is a " 或RegExp["$`"]访问; //在最近一次要匹配的字符串中的最近一次匹配项之后的文本 RegExp.rightContext;// " day" 或RegExp["$'"]访问; //最近一次(最后一次)匹配的捕获组 RegExp.lastParen;// "s" 或RegExp["$+"]访问;
捕获组访问属性:还有9个用于存储捕获组的构造函数属性,访问语法是 RegExp.$n ,其中n取值1~9,用于获取第n个匹配的捕获组。在调用 exec() , test() 或 match() 等正则系列方法时这些属性会被自动填充。
var text="this is a short summer"; var pattern =https://www.jb51.net/(..)or(.)/g; if(pattern.test(text)){ console.log(RegExp.$1); // sh console.log(RegExp.$2); // t }
模式的局限性:
缺少一些高级正则表达式的特性,如不支持向后查找,命名的捕获组(形如 \k<name> 引用之前名为 name 的捕获组的字符串)等。
推荐专题: 《javascript正则表达式使用说明》