日期:2014-05-16 浏览次数:20428 次
分组
? 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 | $' | 在上次匹配之后的子串 |
?
?
?
?
?