什么是正则表达式
正则表达式是用于匹配字符(文本和数字)的规则。
正则表达式是一套“字符模式”的规则。
说白了,正则表达式就是用来描述文本 “长什么样子”。
那么正则表达式怎么写呢?
var reg = new RegExp('规则','参数')
这样就创建了一个正则表达式对象,其中第一个参数是你对规则的表述,第二个参数是一些匹配细节,可以不传。
有了规则,就可以测试某个目标是否符合该规则。
reg.test(target) 会返回匹配的结果,true或false,分别代表匹配通过和匹配不通过。
比如:
var reg = new RegExp('a')
reg.test('abc') //abc包含a,返回true
reg.test('bbc') //bbc不包含a,返回false
这里就是在匹配‘abc’这个字符串里包不包含‘a’。
可以简化写法,用字面量表达:var reg = /a/
var reg = /a/ //等同于:var reg = new RegExp('a')
reg.test('abc') //true
reg.test('bbc') //false
正则的匹配默认是区分大小写的,如果想忽略大小写,可以:new RegExp('a',i)。i(ignore)代表忽略大小写。
/a/.test('Abc') //false
/a/i.test('Abc') //true
默认只会匹配到第一个符合规则的,如果想把所有的符合规则的片段都匹配出来,可以:new RegExp('a',g)。g(global)代表全局。
写法
规则
中括号
中括号内表示对单个字符的描述:var reg = new RegExp('[a]')
中括号里可以放多个字符,比如: var reg = new RegExp('[abc]') ,表示可以是a或b或c,注意, 不是匹配‘abc’这个字符串,而是表示a或b或c都可以通过匹配,
var reg = new RegExp('[abc]')
reg.test('1111a') //true
reg.test('1111b') //true
reg.test('1111c') //true
reg.test('1111d') //false
中括号里随便你写
var reg = new RegExp('[abc1234]')
var reg = new RegExp('[0123456789]')
范围
中括号里,可用中划线规定范围:
var reg = new RegExp('[0-9]') //等同于var reg = new RegExp('[0123456789]')
var reg = new RegExp('[a-z]') //等同于var reg = new RegExp('[abc...xyz]')
//还可以写多个范围复合
var reg = new RegExp('[a-zA-Z]') //等同于var reg = new RegExp('[abc...xyzABC...XYZ]')
var reg = new RegExp('[a-zA-Z0-9]') //等同于var reg = new RegExp('[abc...xyzABC...XYZ0123456789]')
如果想表示特定范围之外的范围,在中括号之内的开头加上^。
var reg = new RegExp('[^0-9]') //表示0-9之外的字符
var reg = new RegExp('[^a-z]') //表示a-z之外的字符
特殊范围符号
有很多特殊范围符号来表示特定的范围。
| 字符 | 意义 | 例子 |
|---|---|---|
| . | 任意字符 | new RegExp('.') |
| \d | 所有数字,等同于[0-9] | new RegExp('\d') |
| \w | 所有单词字符:数字 + 所有字母 + 下划线_,等同于:[0-9a-zA-Z_] | new RegExp('\w') |
| \W | 所有非单词字符, 等同于:[^0-9a-zA-Z_] | new RegExp('\W') |
| \s | 空白字符:空格、回车、换行符、制表符等, | new RegExp('\s') |
| \S | 非空白字符:数字 + 所有字母 + 下划线_, 等同于:[^\s] | new RegExp('\S') |
| \. | \.表示.这个字符,由于.这个字符本身代表所有字符,因此需要用\转义一下 | new RegExp('\.') |
| \\ | \\表示\这个字符,由于\这个字符本身用于转义,因此需要用\转义一下 | new RegExp('\\') |
| ^ | 以什么什么作为开头 | new RegExp('^\d') |
| $ | 以什么什么作为结尾 | new RegExp('\d$') |
// .表示任意字符
var reg = new RegExp('.')
// \d表示所有数字,等同于[0-9]
var reg = new RegExp('\d')
// \w表示单词字符:数字 + 所有字母 + 下划线_,等同于:[0-9a-zA-Z_]
var reg = new RegExp('\w')
// \W表示非单词字符,等同于:[^0-9a-zA-Z_]
var reg = new RegExp('\W')
// \s表示空白字符:空格、回车、换行符、制表符等,
var reg = new RegExp('\s')
// \S表示非空白字符, 等同于:[^\s]
var reg = new RegExp('\S')
// \.表示.这个字符,由于.这个字符本身用于转义,因此需要用\转义一下
var reg = new RegExp('\.')
// \\表示\这个字符,由于\这个字符本身用于转义,因此需要对自己也用\转义一下
var reg = new RegExp('\\')
// ^表示以什么什么作为开头
var reg = new RegExp('^\d') //以数字开头
// $表示以什么什么作为结尾
var reg = new RegExp('\d$') //以数字结尾
var reg = new RegExp('^\d$') //以数字开头和结尾
模式重复
如果想表示某个字符模式重复几次,可以在后面加上{重复次数}。
var reg = new RegExp('a{1}') //表示a重复1次
var reg = new RegExp('[0-9]{3}') //表示0-9之内的字符重复3次
var reg = new RegExp('a{1,3}') //表示a重复1~3次
var reg = new RegExp('[0-9]{1,3}') //表示0-9之内的字符重复1~3次
var reg = new RegExp('a{n,}') //表示a至少重复n次,n次和n次以上
var reg = new RegExp('[0-9]{n,}') //表示0-9之内的字符至少重复n次,n次和n次以上
var reg = new RegExp('a+') //表示a重复1~多次,即1次到多次,等同于{1,}
var reg = new RegExp('[0-9]+') //表示0-9之内的字符重复1~多次,即1次到多次
var reg = new RegExp('a*') //表示a重复任意次数,即0次到多次,等同于{0,}
var reg = new RegExp('[0-9]*') //表示0-9之内的字符重复任意次数,即0次到多次,等同以{1,}
var reg = new RegExp('a?') //表示a最多重复1次,即0次到1次,等同于{0,1}
var reg = new RegExp('[0-9]?') //表示0-9之内的字符最多重复1次,即0次到1次,等同以{0,1}
| 字符 | 意义 |
|---|---|
| {n} | 重复n次 |
| {n,m} | 重复n~m次 |
| {n,} | 重复n次及n次以上 |
| + | 重复1~多次,即1次到多次,等同于{1, } |
| {*} | 重复任意次数,即0次到多次,等同于{0,} |
| {?} | 最多重复1次,即0次到1次,等同于{0,1} |
练习
- 写个邮箱的正则表达式
/^w+\.w+@w+$/