理解javascript中的捕获组

在javascript高程这本书的第五章讲述RegExp实例方法的时候就有提到“捕获组”,捕获组是正则表达式中的概念。

首先看看下列创建正则表达式的语法(其中的模式(pattern)部分可以是任何简单或复杂的正则表达式)。

var expression = /pattern/flags;

在正则表达式中就可以分组,用一对圆括号括起来的表达式就是一个分组。

var ptr=/(pattern)/;//js中分组的基本写法

var pattern1=/(sun)(day)/;

例如上面的"/(sun)(day)/"就表示了由"sun"和"day"两个子表达式构成的两个分组(其实这两个分组也是捕获组),它的最终匹配效果和"/(sunday)/"是一样的,只是分组之后可以把各组子表达的结果分别处理,让操作更加灵活。

捕获组就是将正则表达式中的子表达式匹配的结果和分组按顺序保存,之后可以通过序号或者名称来使用这些内容。(目前还不支持捕获组命名,只能通过序号访问)

下面例举几个四则运算的例子,来了解一下捕获组的基本用法。
1.通过捕获组分别读取前运算数、运算符和后运算数:

var pattern2=/(\d+)([\+\-\*\/])(\d+)/;
var text="10*20";
var matches=pattern2.exec(text);//exec()接收一个参数,即要应用模式的字符串
alert(matches[0]);//输出10*20(整个字符串本身与模式匹配)
//序号0为匹配的内容,分组从序号1开始
alert(matches[1]);//10
alert(matches[2]);//*
alert(matches[3]);//20

在表达式中直接使用某个分组的内容,即捕获组的反向引用。

2.匹配前后两个数值相同的情况:

var pattern3=/(\d+)([\+\-\*\/])\1/;//反向引用时用"\+序号"
alert(pattern3.test("10-10"));//true
alert(pattern3.test("10-5"));//false

3.置换前后两个数的位置:

var str="123/456";
var pattern2=/(\d+)([\+\-\*\/])(\d+)/;
//在replace语句中引用的写法是“$+序号”
var laststr=str.repalce(pattern2,"$3$2$1");//456/123


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值