13reg.md

goer ... 2022-01-05 Javascript
  • Javascript
大约 4 分钟

正则表达式

[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));
1
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]/   //报错,不能倒序
1
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
1
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 代表全是数字
1
2

# 5. \w 和 \W

\w --- [a-zA-Z0-9] 包含字母数字就是true

\W ----- [^a-zA-Z0-9] 不包含数字和字母

re = /\W/;
// 如果返回 false  代表全是特殊字符(不包含字母和数字)
1
2

# 6. \s 和 \S

\s ---- 空格

\S\ ------ 除了空格的任何字符

var re = /\s/   // 验证是否有空格

var re = /\S/   
// 返回false 说明是纯空格
1
2
3
4

# 7 . 点 .

. 表示任何字符

re = /./  
// 任意字符  没有字符就返回false
1
2

# 8. 脱字符 ^

^表示验证字符串开始位置

re = /^b/;  //满足时b开头 true

1
2

# 9. 美元符 $

$ 表示验证字符串结束位置

re = /^ab$/;  //既有开始又有结束,说明时拿整个字符串来验证 str=ab满足

re = /&b/;  //满足b结尾的字符
1
2
3

# 10.符号

+:表示匹配大于等于一个字符,最少要有一个字符 等同与{1,}

str = '12355455';
re = /\d+/;  //最少要有一个字符满足[0-9]
1
2

?:表示匹配零个或者一个字符,等同于 {0,1}

re = /^\d?$/   //要么没有数字,要么只有一个
1

*:表示匹配任意长度,等同于{0,}

re = /^\d*$/  //满足 [0-9]任意长度的字符
1

# 11.花括号(大)

{}:指定长度

re = /^\d{4,8}$/    //指定满足4,8位的[0-9的数子]
re = /\d{5}/       //指定长度位5位的数子
re = /\d{5,}/      //指定长度大于等于5的数子
1
2
3

# 12.符号2

?=字符: 验证字符后面是否紧跟另一个字符

str = 'aeaqmqa'
re = /m(?=q)/   //m后面紧接q满足true
1
2

?!=字符: 验证字符后面是否不紧跟另一个字符

str = 'aeaqmqa'
re = /m(?!=q)/   //和上一个反过来 flase
1
2

|:或者,匹配两边任意规则

re = /ae(?=a|b)/    // ae的后面紧接 a或着b
re = /q(?!=c|b)/     // true
1
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.匹配时分秒
1
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;
1
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]
1
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]) //放数组
}
1
2
3
4
5
6
7
8

search()返回符合规则的字符首次出现的索引位置

var str = 'hello world';

//console.log(str.indexOf('o')); //找到字符首次出现的索引

console.log(str.search(re));
re = /[oe]/;  //找到o和e最先出现的索引  //1 
re = /[zxy]/; //找不到返回   //-1
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组成的数组
1
2
3
4

# 5.replace()

replace()替换字符串 和js字符串方法类似

var str = 'hello world';

console.log(str.replace('o','qq'))  //默认替换一个
console.log(str.replace('o/g','qq')) //全部替换
1
2
3
4

# 模式修正符

在最后面的 / 的右边

//全局匹配,匹配字符串中所有符合规则的字符
//   /g
// 上面用过滴

//   /i
//匹配时不区分大小写
var str = 'hello world';
re = /H/i/  //不用区分大小写 true
1
2
3
4
5
6
7
8