分组
var re = /(dog){2}/g;
反向引用
按从左到右的顺序对分组进行编号
1.从RegExp中获得反向引用的值
var s = "#123456789";
var re = /#(\d+)/;
re.test(s);
alert(RegExp.$1); //输出123456789
2.还可以直接在定义分组的表达式中包含反向引用,通过\1,\2```实现
var s = "catcat";
var re = /(dog)\1/;
alert(re.test(s)); //true
3.用在replace()方法中
var s = "1234 5678";
var re = /(\d{4}) (\d{4})/;
var s = s.replace(s, "$2 $1");
候选|
var s1 = "red";
var s2 = "cat";
var re = /(red|cat)/;
re.test(s1); //true
re.test(s2); //true
创建反向引用的分组,称之为捕获型分组;同时还有一种非捕获型分组,他不会创建反向引用。
在较长的正则表达式中,存储反向引用会降低匹配速度。通过使用非捕获型分组,仍然可以拥有与匹配字符串序列同样的能力,而无需存储结果的开销。
var re = /#(?:\d+)/; ——?:创建非捕获性分组
删除页面所有html标签的例子
String.prototype.trimHtml = function(){
var re = /<(?:.|\s)*?>/g;
return this.replace(re, "");
}
前瞻——告诉正则表达式运算器向前看一些字符而不移动其位置
正向前瞻检查的是接下来出现的是不是某个特定字符集——将模式放在(?=和)之间,分组不考虑前瞻的存在。
负向前瞻检查接下来的不应该出现的特定字符集——将模式放在(?!和)之间。
注:JavaScript不支持后瞻,后瞻匹配这种模式:匹配b当且仅当前面没有a
var s1 = "bedroom";
var s2 = "bedding";
var re = /(bed(?=room))/;
alert(re.test(s1)); //true;
alert(RegExp.$1); //bed
alert(re.test(s2)); //false;
var s1 = "bedroom";
var s2 = "bedding";
var re = /(bed(?!room))/;
alert(re.test(s1)); //false
alert(RegExp.$1); //bed
alert(re.test(s2)); //true
边界
^——行开头
$——行结尾
\b——单词的边界
\B——非单词的边界
多行模式
/m
var s = "aaa sss\ndsdds sddd\naaadffs sdfewf";
var r = /(\w+)$/gm;
alert(s.match(r)); //这样可以返回sss,sddd,sdfewf
RegExp对象
属性:global——表示g是否已设置
ignoreCase——表示i是否已设置
lastIndex——整数,代表下次匹配将会从哪个字符位置开始(只有使用exec()或test()函数时才填入,否则为0)
multiline——表示m是否已设置
source——正则表达式的源字符串形式。/[ba]*/的source将返回"[ba]*"
静态属性:
长 名 | 短 名 | 描 述 |
input | $_ | 最后用于匹配的字符串(传递给exec()或test()的字符串) |
lastMatch | $& | 最后匹配的字符 |
lastParen | $+ | 最后匹配的分组 |
lastContext | $` | 在上次匹配的前面的子串 |
multiline | $* | 用于指定是否所有的表达式都使用多行模式的布尔值 |
rightContext | $' | 在上次匹配之后的子串 |