博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)正则表达式小括号的多义性
阅读量:4687 次
发布时间:2019-06-09

本文共 1659 字,大约阅读时间需要 5 分钟。

原文地址:http://www.cnblogs.com/snandy/p/3650309.html

小括号在正则表达式这有以下意义

  • 限定量词作用的范围
  • 限定多选结构的范围
  • 为反向引用捕获文本
  • 分组捕获
  • 只分组不捕获
  • 前瞻

 

一、限定量词作用的范围

1
2
3
var
reg1 = /(Matz)?/;
// 0或1个Matz
var
reg2 = /(Matz)+/;
// 1个以上Matz
var
reg3 = /(Matz)*/;
// 0或多个Matz

  

二、限定多选结构的范围

1
2
3
4
var
reg = /(Matz|Eich)/
reg.test(
'Matz'
)
// => true
reg.test(
'Eich'
)
// => true
reg.test(
'John'
)
// => false

  

三、为反向引用捕获文本

1
2
3
4
5
6
var
reg = /(boy)\1/
// 相当于 /boyboy/
reg.test(
'boy'
)
// => false
reg.test(
'boyboy'
)
// => true
 
var
reg /(boy)(girl)\1\2/
reg.test(
'boygirlboygirl'
)
// => true

  

四、分组捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
reg1 = /(\d{3}) (\d{3})/
var
str =
'111 222'
str.replace(reg1,
'$2 $1'
)
// => '222 111' , 注意这里的$2,$1,存放了匹配的字符串
 
var
reg2 = /(\d{3})(\d{4})(\d{4})/
var
mobile =
'13522722724'
reg2.test(mobile)
RegExp.$1
// => 135
RegExp.$2
// => 2272
RegExp.$3
// => 2724
 
var
reg3 = /(\d{3})(\d{4})(\d{4})/
var
mobile =
'13522722724'
mobile.replace(reg3,
'$1 $2 $3'
)
// => '135 2272 2724'

  

五、只分组不捕获(和 "?:" 一起)

1
2
3
var
reg = /(?:\d+)/
reg.test(
'13522722724'
)
RegExp.$1
// => '' 不存储匹配的元素

较长的正则表达式中,反向引用会降低匹配速度,性能降低,不需要反向引用时应使用分组不捕获。

 

六、前瞻(lookahead,和 "?=" 一起)

它告诉正则表达式向前看一些字符但不移动位置,前瞻不匹配任何字符只匹配文本中的特定位置。

1
2
3
4
5
var
reg = /(John) (?=Resig)/
reg.test(
'John'
)
// => false
reg.test(
'John Backus'
)
// => false
reg.test(
'John Reisg'
)
// => true
RegExp.$1
// => 'John',注意这里不是 "John Resig"

如下是一个利用前瞻实现手机号格式化的小函数

1
2
3
4
5
6
7
8
9
/*
 
* 手机号分隔
 
* 13522722724 -> 135 2272 2724
 
*/
function
separateMobile(num) {
    
var
arr = (
'0'
+ num ).replace(/(\d{4})(?=\d)/g,
"$1 "
).split(
''
)
    
arr.shift()
    
return
arr.join(
''
)
}

  

转载于:https://www.cnblogs.com/fcsh820/p/3672338.html

你可能感兴趣的文章
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>
C程序的启动和终止
查看>>
tomcat 和MySQL的安装
查看>>
11.5 内部类
查看>>
Cosine Similarity
查看>>
halt和shutdown 的区别
查看>>
git常用操作
查看>>
京东SSO单点登陆实现分析
查看>>
u-boot启动第一阶段
查看>>
MySQL批量SQL插入性能优化
查看>>
定义列属性:null,default,PK,auto_increment
查看>>
用户画像展示
查看>>
C#中StreamReader读取中文出现乱码
查看>>
使用BufferedReader的时候出现的问题
查看>>
linux安装图形界面
查看>>
Android广播发送失败
查看>>
博弈论之入门小结
查看>>
解决IE8下opacity属性失效问题,无法隐藏元素
查看>>
C#匿名函数的坑
查看>>