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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值