日期:2014-05-16  浏览次数:20428 次

Js正则学习2

分组

? 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 $' 在上次匹配之后的子串
? ? ? ?

?

?

?

?

?