正则表达式小括号的多义性
来源:互联网 发布:迅游网络助手礼包在哪 编辑:程序博客网 时间:2024/05/21 23:57
小括号在正则表达式这有以下意义
- 限定量词作用的范围
- 限定多选结构的范围
- 为反向引用捕获文本
- 分组捕获
- 只分组不捕获
- 前瞻
一、限定量词作用的范围
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(
''
)
}
0 0
- 正则表达式小括号的多义性
- 正则表达式小括号的多义性
- 正则表达式小括号的多义性
- 正则表达式小括号的多义性
- Javascript小括号“()”的多义性
- 中括号在正则表达式中的多义性
- Javascript 中的小括号 “()” 的多义性
- JavaScript小括号、中括号、大括号的多义性
- JavaScript小括号、中括号、大括号的多义性
- JavaScript小括号、中括号、大括号的多义性
- JavaScript小括号、中括号、大括号的多义性
- JavaScript小括号、中括号、大括号的多义性
- Emacs正则表达式的小括号
- Javascript中括号“[]”的多义性
- 正则表达式之小括号
- Javascript中大括号“{}”的多义性
- 解析Javascript中大括号“{}”的多义性
- Javascript中大括号“{}”的多义性
- 导出压缩包
- 你必须记住的30个CSS选择器[译]
- 工作线程操作主界面控件引起死锁及解决
- LeetCode 42. Trapping Rain Water(装雨水)
- CORS(跨域资源共享) 的配置
- 正则表达式小括号的多义性
- lca倍增算法学习记录
- jquery的选择器
- 课程练习三-1004-problem D
- char与int数据类型转换
- Android Studio 快捷键 for Mac OS X
- Python 资源大全
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- Analysis EDI's log