一、常见特殊字符
常见用法 | 描述 |
---|---|
\d | 匹配数字 |
\w | 匹配数字或者字母 |
+ | 至少一个 |
* | 任意个(包括0) |
? | 0个或1个 |
^ | 行的开头 |
. | 除换行符/n之外的任何单字符 |
$ | 行的结尾 |
\s | 匹配空格 |
{n} | 匹配n个 |
{m,n} | 匹配m-n个 |
A|B | A或B个 |
[x,y,z] | 匹配方括号中的任意字符 |
[^x,y,z] | 匹配任何没有包含在方括号中的字符 |
二、创建方式
JavaScript 创建正则表达式的方式有两种,第一种是直接通过/正则表达式/
写出来,第二种方式是通过new RegExp('正则表达式')
创建一个RegExp对象。
1、/正则表达式/
let reg1 = /abc/;
console.log(reg1.test('abcde')); // true
console.log(reg1.test('abde')); // false
2、new RegExp('正则表达式')
let reg2 = new RegExp('abc');
console.log(reg2.test('abcde')); // true
console.log(reg2.test('abde')); // false
三、 正则表达式的方法
方法 | 描述 |
---|---|
exec | 查找匹配方法,返回一个数组(未匹配到则返回 null) |
test | 测试是否匹配的方法,它返回 true 或 false。 |
match | 查找匹配的String方法,它返回一个数组,在未匹配到时会返回 null。 |
matchAll | 查找所有匹配的String方法,它返回一个迭代器(iterator) |
search | 测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1 |
replace | 查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串 |
split | 使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法。 |
使用方法:
1、exec(), 用( )表示的就是要提取的分组
var reg = /(\d{3})-(\d{7})/;
console.log(reg.exec('010-6504363'));
/*
[
'010-6504363', //匹配到的整个字符串
'010', // 匹配成功的子串
'6504363', // 匹配成功的子串
index: 0, // 匹配文本的第一个字符的位置
input: '010-6504363', // 被检索的字符串
groups: undefined
]
*/
2、test()
var reg2 = new RegExp('^[0-9]{11}$');
console.log(reg2.test('17784458894')); // true
3、 match(),匹配不到时返回null
var s = "abcda1212adsww232f";
//两个参数都是字符串
// 只匹配第一个出现的字符串
var y1 = s.match(/\d+/); // [ '1212', index: 5, input: 'abcda1212adsww232f', groups: undefined ]
// 全局匹配,匹配所有符合的子串
var y2 = s.match(/\d+/g); // [ '1212', '232' ]
4、search(),找得到的话,返回匹配的第一个,找不到的话返回-1
var s = "abcda";
//两个参数都是字符串
var y1 = s.search(/a/); // 0
var y2 = s.search(/a$/); // 4
var y3 = s.search(/^a$/); // -1
5、replace(),能替换多个
var s = "abcda";
//两个参数都是字符串
var y1 = s.replace('a','x');//'xbcda'
//前面参数使用正则,后面使用字符串
var y2 = s.replace(/a/g,'x');//'xbcdx'
6、split(),可使用多个字符分割
// 平时用的分割方法,不能区分是几个空格
console.log('a b c d e f'.split(' ')); // ['a','b','c','','d','e','f']
// 使用正则后,更加灵活,可任意匹配
console.log('a,b c;; d e f'.split(/[\s\,\;]+/)); // ['a','b','c','d','e','f']
四、常用场景
1、验证email
const re = /^([0-9a-zA-Z-_])+@([0-9a-zA-Z-_])+((\.[0-9a-zA-Z-_]{2,3}){1,2})$/;
console.log(re.test('dingding@qq.com')); //true
2、电话号码
const re = /^\d{3}-\d{7}$/;
console.log(re.test("010-1234567")); //true