正则表达式-分组

正则表达式对于单个字符的重复,非常方便。比如/d+表示1个或多个数字,*表示重复0次或多次;+重复1次或多次;?重复0次或1次;{n}重复n次;{n,}重复n次或多次;{n,m}重复n次到m次;指定的字符后加特定的限定符,即可实现单字符的重复,那么,对于一组字符串的重复,正则表达式该如何操作?

用小括号来指定子表达式(或称分组),对指定的子表达式进行重复,即一组字符串的重复。

 

1、简单分组应用

例:Ip正确匹配

 

function isDigit(str)

{

    var reg = /^((2[0-4]/d|25[0-5]|0|1?/d/d?)/.){3}(2[0-4]/d|25[0-5]|0|1?/d/d?);

    return reg.test(str);

}

 

var str = "232.0.123.255";

document.write("result is "+isDigit(str));  result is true

2、向后引用—用于重复搜索前面某个分组匹配的文本

组号分配原则:

(1)分组0对应整个正则表达式

(2)组号分配过程是从左向右扫描两遍:第一遍只给未命名组分配,第二遍只给命名组分配。因此所有命名组的组号都大于未命名组的组号。

(3)可以使用(?:exp)这样的语法剥夺一个分组对组号分配的参与权

例:

function isDigit1()

{

   var reg = //b(/w+)/b/s+/1/b/;

   var str = "good good";

   document.write("result is "+reg.test(str)); result is true

}

整个表达式/b(/w+)/b/s+/1/b组号为0,(/w+)组号为1

3、零宽断言

(1)(?=exp)零宽度正预测先行断言,匹配exp前面的位置

function isDigit2()

{

     var reg = //w+(?=ing/b)/ig;
     var str = "I'm singing while you're dancing.";
     var arry = str.match(reg);
     for(var i=0;i<arry.length;i++)
       document.write(arry[i]+"     ");   sing   danc

}

(2)(?<=exp)—零宽度正回顾后发断言,匹配exp后面的位置

function isDigit2()

{

     var reg = //w+(?=re/b)/ig;
     var str = "reading a book ";
     var arry = str.match(reg);
     for(var i=0;i<arry.length;i++)
       document.write(arry[i]+"     ");   ading

}

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:Simsun; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:"Times New Roman"; mso-font-charset:0; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值