浅谈正则表达式-js版

一、常见特殊字符

常见用法描述
\d匹配数字
\w匹配数字或者字母
+至少一个
*任意个(包括0)
?0个或1个
^行的开头
.除换行符/n之外的任何单字符
$行的结尾
\s匹配空格
{n}匹配n个
{m,n}匹配m-n个
A|BA或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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值