创建正则表达式对象有三种方式:字面量方法、构造函数、工厂函数(不常用)。
下面介绍字面量和构造函数方式创建正则表达式对象。、
字面量:
// /pattern/flags
pattern1 = /\w/i;
pattern2 = /\d{2,}/;
// 以字面量创建的正则表达式对象不需要加引号。
构造函数:
// new RegExp(patternString [,flags])
pattern1 = new RegExp('\d{2}','i');
pattern2 = new RegExp('\w','g');
pattern3 = new RegExp('www\d','gi');
// 或者
pattern4 = new RegExp(/\d{2}/,'i');
note:需要注意的是下面这种既有斜杠/又有引号的是错误的。pattern3 = new RegExp('/\d{2}/','i')
难点特殊符号的含义:
. | 匹配任意单个字符,但是行结束符号除外:\n \r |
\w | 匹配字母数字下划线。 |
\W | 匹配除去字母数字下划线之外的字符 |
\s | 匹配一个空白字符。包括空格( )、制表符(\t)、换页符(\f)、换行符(\r \n) |
[asd] | 匹配集合中任意一个字符。 |
[^asd] | 匹配任意不在括号中的字符。 |
(x) | 分组括号,匹配x并且捕获匹配项。 |
\1,\2,\n | 反向引用 |
(?:x) | 匹配x但是不会捕获 |
x(?=y) | 仅匹配被y跟随的x |
x(?!y) | 仅匹配不被y跟随的x |
(?<=y)x | 只有在 后面才匹配 |
(?<!y)x | 只有不在 后面才匹配 |
x|y | 匹配x或者y |
分组知识
正则表达式中分组分为一下几种:
- 捕获型分组
- 非捕获型分组
- 前瞻型分组
- 后瞻型分组
捕获型分组 ( )
捕获型分组知识主要包含:引用与嵌套分组
被正则表达式匹配到的字符串会被暂存起来。其中分组捕获的串会从1开始编号,我们可以引用这些捕获项。
捕获型分组常常和replace配合。var reg = /(\d{4})-(\d{2})-(\d{2})/ var date = '2011-05-12' reg.test(date) RegExp.$1 // 2011 RegExp.$2 // 05 RegExp.$3 // 12
var reg = /(\d{2}).(\d{2})\/(\d{4})/ var date = '12.21/2012' date = date.replace(reg, '$3-$1-$2') // date = 2012-12-21
非捕获型分组(?:)
前瞻型分组(?=) (?!)