正则表达式的() [] {}的意思。
()
是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
(\s*)
表示连续空格的字符串。
[]
是定义匹配的字符范围。比如 [a-zA-Z0-9]
表示相应位置的字符要匹配英文字符和数字。[\s*]
表示空格或者*
号。
{}
一般用来表示匹配的长度,比如\s{3}
表示匹配三个空格,\s[1,3]
表示匹配一到三个空格。
(0-9)
匹配 '0-9'
本身。 [0-9]*
匹配数字(注意后面有* ,可以为空)[0-9]+
匹配数字(注意后面有 +,不可以为空){1-9}
写法错误。
[0-9]{0,9}
表示长度为 0 到 9 的数字字符串。
正则表达式小括号的多义性
小括号在正则表达式这有以下意义
- 限定量词作用的范围
- 限定多选结构的范围
- 为反向引用捕获文本
- 分组捕获
- 只分组不捕获
- 前瞻
限定量词作用的范围
1 2 3
| var reg1 = /(Matz)?/; var reg2 = /(Matz)+/; var reg3 = /(Matz)*/;
|
限定多选结构的范围
1 2 3 4
| var reg = /(Matz|Eich)/ reg.test('Matz') reg.test('Eich') reg.test('John')
|
为反向引用捕获文本
1 2 3 4 5 6
| var reg = /(boy)\1/ reg.test('boy') reg.test('boyboy') var reg /(boy)(girl)\1\2/ reg.test('boygirlboygirl')
|
分组捕获
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') var reg2 = /(\d{3})(\d{4})(\d{4})/ var mobile = '13522722724' reg2.test(mobile) RegExp.$1 RegExp.$2 RegExp.$3 var reg3 = /(\d{3})(\d{4})(\d{4})/ var mobile = '13522722724' mobile.replace(reg3, '$1 $2 $3')
|
只分组不捕获(和 “?:” 一起)
1 2 3
| var reg = /(?:\d+)/ reg.test('13522722724') RegExp.$1
|
较长的正则表达式中,反向引用会降低匹配速度,性能降低,不需要反向引用时应使用分组不捕获。
前瞻(lookahead,和 “?=” 一起)
它告诉正则表达式向前看一些字符但不移动位置,前瞻不匹配任何字符只匹配文本中的特定位置。
1 2 3 4 5
| var reg = /(John) (?=Resig)/ reg.test('John') reg.test('John Backus') reg.test('John Reisg') RegExp.$1
|
如下是一个利用前瞻实现手机号格式化的小函数
1 2 3 4 5 6 7 8 9
|
function separateMobile(num) { var arr = ( '0' + num ).replace(/(\d{4})(?=\d)/g,"$1 ").split('') arr.shift() return arr.join('') }
|