//$$ $ //$& 匹配整个模式的子字符串(与RegExp.lastMatch的值相同) //$` 匹配子字符串之前的子字符串(与RegExp.leftContext的值相同) //$' 匹配子字符串之后的子字符串(与RegExp.rightContext的值相同) //$n 匹配第n个捕获组子字符串,其中n等于0-9。$1表示匹配第一个捕获组的子字符串(从第1个算起) //$nn 匹配第nn个捕获组的子字符串,其中nn等于01-99
console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$0'))//$0,$0,$0,$0 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$1'))//ca,ba,sa,fa console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$2'))//t,t,t,t console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$3'))//$3,$3,$3,$3 console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$$'))//$,$,$,$ console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$&'))//cat,bat,sat,fat console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,'$`'))//,cat,,cat,bat,,cat,bat,sat, console.log('cat,bat,sat,fat'.replace(/(.a)(t)/g,"$'"))//,bat,sat,fat,,sat,fat,,fat,
[5]实例属性:通过实例属性可以获知一个正则表达式的各方面信息,但却没有多大用处,因为这些信息全都包含在模式声明中
[5.1]global:布尔值,表示是否设置了g标志
[5.2]ignoreCase: 布尔值,表示是否设置了i标志
[5.3]lastIndex: 整数,表示开始搜索下一个匹配项的字符位置,从0算起
[5.4]multiline: 布尔值,表示是否设置了标志m
[5.5]source: 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回
var pattern = new RegExp('\\[bc\\]at','i'); console.log(pattern.global);//false console.log(pattern.ignoreCase);//true console.log(pattern.multiline);//false console.log(pattern.lastIndex);//0 console.log(pattern.source);//'\[bc\]at'
[6]构造函数属性(静态属性):适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。关于这些属性的独特之处在于可以通过两种方式访问它们,即长属性名和短属性名。短属性名大都不是有效的ECMAScript标识符,所以必须通过方括号语法来访问它们
[6.1]使用这些属性,可以从exec()方法或text()方法执行的操作中提取出更具体的信息
//长属性名 短属性名 说明
//input $_ 最近一次要匹配的字符串
//lastMatch $& 最近一次的匹配项
//lastParen $+ 最近一次匹配的捕获组
//leftContext $` input字符串中lastMatch之前的文本
//multiline $* 布尔值,表示是否所有表达式都使用多行模式
//rightContext $' input字符串中lastMarch之后的文本
[注意1]opera不支持短属性名
[注意2]opera不支持input\lastMatch\lastParen\multiline
[注意3]IE不支持multiline
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 console.log(RegExp['$_']);//'this has been a short summer' console.log(RegExp['$`']);//'this has been a ' console.log(RegExp["$'"]);//' summer' console.log(RegExp['$&']);//'short' console.log(RegExp['$+']);//'s' console.log(RegExp['$*']);//false }
[6.2]还有多达9个用于存储捕获组的构造函数属性
//RegExp.$1\RegExp.$2\RegExp.$3……到RegExp.$9分别用于存储第一、第二……第九个匹配的捕获组。在调用exec()或test()方法时,这些属性会被自动填充
var text = 'this has been a short summer'; var pattern = /(..)or(.)/g; if(pattern.test(text)){ console.log(RegExp.$1);//sh console.log(RegExp.$2);//t }