正则表达式

正则表达式

正则表达式进阶玩法

正则表达式(regular Experssion : RegExp)
用来处理字符串的规则


  • 只能处理字符串
  • 他是一个规则,可以验证字符串是否符合某个规则(test),也可以把字符串中符合规则的内容捕获到(exec / match…)

编写正则表达式

  • 第一种方式:
    • 字面变量创建方式(两个斜杠之间包起来的,都是用来描述规则的元字符。
    • let reg = /\d+/;

  • 第二种方式
    • 构造函数模式创建,两个参数 ,元字符字符串 和 修饰符字符串
    • let reg2 = new RegExp("\d+");


  • 正则表达式由两部分组成
    • 元字符和修饰符
元字符
特殊元字符\d0~9任意一个数字
\D非0~9之间的任意字符
\w字母、数字或下划线 [a-z 、A-Z 、0-9 、_ ]
\W非字母、数字或下划线
\s匹配任意一个空白字符 (包括空格、制表符、换页符)
\b匹配边界符 "hello-world" (每个单词旁边字符)
\n匹配一个换行符
\转义字符 ,( \. 只表示一个小数点)
.表示除了\n之外的任意字符
^以某个字符开头
$以某个字符结尾
\t一个制表符(一个TAB键,四个空格)
a|ba或者b任意一个
[abc]a或b或c任意一个
[^abc]除了a\b\c之外的
[a-z]表示a到z中任意一个字母
[0-9] [0-9] 等价于 \d, 但 是 只 能 写 0—9 之 间 的 数,如果是【12,35】就不能行。
[^a-z]表示除了a到z中任意一个字母
()分组
(?:)当前分组只匹配不捕获
(?=)正向预查
(?!)反向预查
量词元字符*出现零到多次
?出现零次 或 一次
+出现一次到多次
{m}出现 m 次
{m,}出现至少 m 次
{m,n}出现 m~n 次
普通元字符除上述之外的字符
修饰符
iignoreCase 忽略大小写
gglobal 全局匹配
mmultiline 多行匹配
MDN的正则介绍

这里先介绍一种汉字的正则编码

  • /[\u4e00-\u9fa5]/ (二十年前的表达式【放弃吧】)
  • /\p{Unified_Ideograph}/u(【2020年之后就用它】)

正则表达式的应用

有效数字的验证
//可能出现 + - ,也可能不出现。
//一位时0-9都可以,多位时,第一位不能为0
//小数部分可能没有,也可能有。
// let reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/;
//科学计数法的正则表达式
//let reg1 = /^[+-]?(\d|([1-9]\d+))([.]\d+)?([Ee][+-]?\d+)?$/;


密码验证
//数字、字母或下划线
//6-16位
// let reg = /^\w{6,16}$/;





验证真实姓名
// 姓名
// 名字长度为2-10
// 可能有译名·汉字
// let reg = /^\p{Unified_Ideograph}{2,10}(·\p{Unified_Ideograph}{2,10}){0,5}$/u;




验证邮箱
//开头是数字、字母或下划线
// 1、纯数字         123456@qq.com
// 2、纯字母      zhangsan@qq.com
// 3、字母数字混合   zhang123@qq.com
// 4、带点的      zhang.san@qq.com
// 5、带下划线     zhang_san@qq.com
// 6、带连接线     zhang-san@qq.com
// 7、多个后缀        123456@vip.qq.com
// var reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;




身份证号码验证
新的18位身份证号码各位的含义:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
7-14位出生年月日,比如19670401代表196741日;
15-17位为顺序号,其中17位男为单数,女为双数;
18位为校验码,0-9X,由公式随机产生。


//十五位身份证号
// let reg = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/;
//十八位身份证号
// let reg = /^([1-9]\d)(\d{2})(\d{2})([1-9]\d{3})(\d{2})(\d{2})(\d{2})(\d)([0-9Xx])$/;

// 十五位身份证号和十八位身份证号整合
// var reg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/;


正则表达式的创建方式的区别

构造函数因为传递的是字符串,\ 需要写两个才代表斜杠

let = /\d+/g;
reg = new RegExp("\\d+","g");

正则表达式中的部分内容是变量存储的值

  • 两个斜杠之间包起来的都是元字符。(如果正则中要包含某个变量的值,则不能使用自面量方式创建。)
  • 这种情况只能使用构造函数的方式(应为他传递的规则是字符串,只有这样才能进行字符串的拼接。)
let type = "crTel";
reg= /^@"+ type +"@$/;
console.log(reg.test("@crTel@"));  //false

reg = new RegExp("^@"+type+"@$");
console.log(reg.test("@crTel@"));  //true

正则表达式进阶玩法


更多学习内容,请加微信cr13219748239联系。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值