JS 正则表达式

正则表达式

什么是正则

1.用于匹配规律规则的表达式,正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。

2.正则表通常被用来检索、替换那些符合某个模式(规则)的文本。

3.正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

4.简单说:正则表达式实际上就是规定了一系列的字符串规则,比如手机号13838383838,那么,我们怎么让计算机知道这一切呢?

我们人类之所以能分辨出来是因为我们心里有一个模型。正则正式提供一种语法,让我们把自己心中的那种识别模式告诉计算机,让计算机能像我们人类一样去识别特定的字符串。

正则表达式的特点

1.灵活性、逻辑性和功能性非常的强。

2.可以迅速地用极简单的方式达到字符串的复杂控制。

3.对于刚接触的人来说,比较晦涩难懂。比如:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$

4.实际开发,一般都是直接复制写好的正则表达式. 但是要求会使用正则表达式并且根据实际情况修改正则表达式. 比如用户名: /1{3,16}$/

正则表达式的声明

共有两种声明方式,按照具体情况使用:

var reg = /a/; // 普通声明方式,大多数情况下使用
var reg2 = new RegExp('a','g'); // 字符串声明方式,部分情况特别有用

正则表达式组成

1.普通字符 abc 123

2.特殊字符(元字符)/d /w

元字符

在这里插入图片描述

限定符

在这里插入图片描述

参数

在这里插入图片描述

其他

[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思

[^] 匹配除中括号以内的内容

\ 转义符

| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱

() 从两个直接量中选择一个,分组

eg:gr(a|e)y匹配gray和grey

[\u4e00-\u9fa5] 匹配汉字
更多

实战用法举例

邮箱的JS正则表达式:

var mailReg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

手机的JS正则表达式:

var phoneReg = /^1\d{10}$/;

身份证的JS正则表达式:

var idCardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;

姓名(汉字)的JS正则表达式:

var nameReg = /^[\u4e00-\u9fa5]{2,4}$/; // 2-4位的汉字名字

普通域名的JS正则表达式:

var urlReg = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/; // ftp、https或http协议的url

用户名的JS正则表达式:

var userNameReg = /^[A-Za-z0-9-_]*$/; // 用户名为数字英文下划线或短划线

QQ号的JS正则表达式:

var qqReg = /^[1-9][0-9]{4,}$/;

邮编的JS正则表达式:

var mailReg = /^[1-9][0-9]{5}$/;

HTML标签的JS正则表达式:

var tagReg = /<[^>]+>/; //可以用来去掉html文本中的标签,得到纯文字

日期的JS正则表达式:

var dateReg = /^\d{4}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/; //YYYY-MM-dd格式,短线可以视情况替换

时间的JS正则表达式:

var timeReg = /^([0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$/; //HH:mm:ss格式,冒号可以视情况替换

涉及正则表达式的方法

1.字符串后面接3种常用函数:
match(reg)(返回匹配到的字符串)

replace(reg,'...')(替换内容)

search(reg)(返回匹配内容的开始位置)

2.正则表达式后面接2种常用函数:
test(string)(返回是否匹配)

exec(string)(返回匹配到的字符串)
此处转载自https://www.zhangyangjun.com/post/javascript-regular-expression-handbook.html

常用方法

方法test
re.test(str)方法是正则对象上的一个方法,接受一个字符串作为参数,如果字符串中有符合正则的部分,则返回true,反之则返回false。

var str = 'abc';
var re = /a/;
re.test(str) // true

方法search
str.search(re),查找字符串中是否有符合正则的部分,如果有,返回第一个匹配项的位置,否则返回-1;

var str = 'bbcasaggjgh';
var re = /a/;
str.search(re) // 4

方法match
str.match(re),寻找字符串中符合正则的匹配项,并将这些匹配项以数组的形式返回,否则返回null。

var str = 'abcaadaefaahjk';
var re = /a+/g; 
// "+" 是一个量词表示出现一次或更多,"g"表示全局搜索,正则默认匹配到一个匹配项后就不会继续查找了。
str.match(re) // ["a", "aa", "a", "aa"]

方法replace
str.replace(re, newStr | callback) 该方法首先匹配字符串中符合正则的部分然后替换成newStr或者callback的返回值;

这里的callback = function(str,str1,str2…){return res},参数str表示匹配到的匹配项,str1,str2…分别表示正则匹配项中的第一个,第二个子项。

ar str = "我爱吃饭,我爱睡觉,我爱打豆豆";
var re = /(吃饭)|(睡觉)|(打豆豆)/g ;
str.replace(re, (...grv) => {
    var res = [];
    res = grv[0].split("").map(() => {return "*"}).join("")
    return res
})

MDN


  1. a-z0-9_- ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值