13reg.md
[toc]
# 正则表达式
匹配字符串
1.方法
1.
test()
方法 :用来验证数据
2.规则
规则用
/ /
做边界符
# 规则
# 1. / /
普通字符: 必须包含字符,而且连续
符合规则
true
不符合false
var str = 'dsafsvbfds3234';
var re = /a/ //必须包含字符a true
var re = /abcd/ // false 必须包含而且abcd连在一起
console.log(re.test(str));
2
3
4
5
# 2./ [ ] /
元字符 包含括号内的任何一个字符
var str = 'dsafsvbfds3234';
var re = /[zho]/ // false 包含zho任意字符
var re = /[a-z]/ // true 包含abcd到z字符中的任意一个
var re = /[a-zA-Z0-9]/ //true 包含大小写字母和数字
var re = /[az-]/ //true 只包含az 小横杠 - 中任意一个
var re = /[-az]/ //同上
var re = /[a\-z]/ //同上 \转义符不会被验证
var re = /[z-a]/ //报错,不能倒序
2
3
4
5
6
7
8
9
10
11
12
# 3. / [^ ] /
验证除了中括号外的任何一个字符
var str = 'dsafsvbfds3234';
var re = /[^a-zA-Z0-9]/ // false 除了字母和数字外的任意字符
// str只有字母和数字,没有特殊字符,使用不满足规则 false
var str2 = 'abc qwe'
//包含空格呢, 空格也是空白字符
var re.test(str2) // true;
var str3 = '';
var re.test(str3)
//空呢 不满足 //false
2
3
4
5
6
7
8
9
10
11
12
# 4. \d 和 \D
\d
--- [0-9] 包含0-9任意字符
\D
---- [^0-9] 不包含0-9的任意字符
var re = /\D/;
//不包含0-9的字符 如果返回false 代表全是数字
2
# 5. \w 和 \W
\w
--- [a-zA-Z0-9] 包含字母数字就是true
\W
----- [^a-zA-Z0-9] 不包含数字和字母
re = /\W/;
// 如果返回 false 代表全是特殊字符(不包含字母和数字)
2
# 6. \s 和 \S
\s
---- 空格
\S\
------ 除了空格的任何字符
var re = /\s/ // 验证是否有空格
var re = /\S/
// 返回false 说明是纯空格
2
3
4
# 7 . 点 .
.
表示任何字符
re = /./
// 任意字符 没有字符就返回false
2
# 8. 脱字符 ^
^
表示验证字符串开始位置
re = /^b/; //满足时b开头 true
2
# 9. 美元符 $
$
表示验证字符串结束位置
re = /^ab$/; //既有开始又有结束,说明时拿整个字符串来验证 str=ab满足
re = /&b/; //满足b结尾的字符
2
3
# 10.符号
+
:表示匹配大于等于一个字符,最少要有一个字符 等同与{1,}
str = '12355455';
re = /\d+/; //最少要有一个字符满足[0-9]
2
?
:表示匹配零个或者一个字符,等同于 {0,1}
re = /^\d?$/ //要么没有数字,要么只有一个
*
:表示匹配任意长度,等同于{0,}
re = /^\d*$/ //满足 [0-9]任意长度的字符
# 11.花括号(大)
{}
:指定长度
re = /^\d{4,8}$/ //指定满足4,8位的[0-9的数子]
re = /\d{5}/ //指定长度位5位的数子
re = /\d{5,}/ //指定长度大于等于5的数子
2
3
# 12.符号2
?=字符
: 验证字符后面是否紧跟另一个字符
str = 'aeaqmqa'
re = /m(?=q)/ //m后面紧接q满足true
2
?!=字符
: 验证字符后面是否不紧跟另一个字符
str = 'aeaqmqa'
re = /m(?!=q)/ //和上一个反过来 flase
2
|
:或者,匹配两边任意规则
re = /ae(?=a|b)/ // ae的后面紧接 a或着b
re = /q(?!=c|b)/ // true
2
()
:小括号,表示一个规则整体,一般配合 | 使用
// 练习
1.匹配电话号码
2.匹配邮箱
// var str = '12301328421@ds.com';
// var re = /^[\w\_]{5,12}\@[a-zA-Z0-9]{2,5}\.com$/;
3.匹配50-98
4.匹配年月日
5.匹配时分秒
2
3
4
5
6
7
8
# 方法
# 1. test()
test()
验证规则,符合true 否则false
var str = 'abcdefg';
var re = '[mz]' //满足mz字符
console.log(re.test(str)); //false;
2
3
# 2. exec()
exec()
将符和规则的字符提取出来,放到数组内,如果没有符号返回null(false);
var str = 'abc123def444g';
var re = /\d+/
console.log(re.exec(str)); // [123]
var re =/\d+/g; //g全局
console.log(re.exec(str)); //[123]
console.log(re.exec(str)); //[444]
console.log(re.exec(str)); //[null]
2
3
4
5
6
7
8
9
//提取 存放
re = /\d+/g;
var str='';
var arr = [];
while(a=reg.exec(str)){
s+=a; //放字符串
arr.push(a[0]) //放数组
}
2
3
4
5
6
7
8
# 3. search()
search()
返回符合规则的字符首次出现的索引位置
var str = 'hello world';
//console.log(str.indexOf('o')); //找到字符首次出现的索引
console.log(str.search(re));
re = /[oe]/; //找到o和e最先出现的索引 //1
re = /[zxy]/; //找不到返回 //-1
2
3
4
5
6
7
# 4. match()
用法和exec()差不多
exec
一次一次的拿取符合规则的字符
match
时一次性拿去符合规则的字符
var str = 'he333llo worl22d';
var re = /\d/g;
console.log(str.match(re)); //输出所有数字0-9组成的数组
2
3
4
# 5.replace()
replace()
替换字符串 和js字符串方法类似
var str = 'hello world';
console.log(str.replace('o','qq')) //默认替换一个
console.log(str.replace('o/g','qq')) //全部替换
2
3
4
# 模式修正符
在最后面的 / 的右边
//全局匹配,匹配字符串中所有符合规则的字符
// /g
// 上面用过滴
// /i
//匹配时不区分大小写
var str = 'hello world';
re = /H/i/ //不用区分大小写 true
2
3
4
5
6
7
8