【前端js】算法全归纳(三)字符串:最常用的20个正则表达式(附实例详解)


题目来源于牛客网前端专题:
https://www.nowcoder.com/ta/front-end?page=1
https://www.nowcoder.com/ta/js-assessment
https://www.nowcoder.com/ta/coding-interviews
其他常用正则总结https://www.jianshu.com/p/4fb6354708e6


一、表单验证常用

(结合test方法)
一般验证输入是否符合标准,需要加上^$匹配整个字符串

1.颜色

/^rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/ rgb(255, 255, 255)格式的10进制颜色,可以带空格
/^#?(\w{6}|\w{3})$/十六进制颜色,字符可以出现 3 或 6 次,需要是用量词和分支结构。

2.用户名

/^\w{4,16}$/ 4到16位(字母,数字,下划线,减号)

3.时间

/^[01]\d|[2][0-3]:[0-5]\d$/ 24 小时制,0/1和2开头的情况分支。共 4 位数字,第一位数字可以为 [0-2]。 当第 1 位为 “2” 时,第 2 位可以为 [0-3],其他情况时,第 2 位为 [0-9]。 第 3 位数字为 [0-5],第4位为 [0-9]。
/^(0?\d|1\d|2[0-3]):(0?\d|[1-5]\d)$/前面的 “0” 可以省略。时钟0,1,2开头分支,分钟0和1-5开头分支

4.日期

/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/年份四位数字,月份0(不可为00),1分支,日期0(不可为00),12(0-9),3(0-1)分支
/\d{4}(-|\/|\.)\d{2}\1\d{2}/连接符号可以是. - /的日期,反向应用绑定前面的获取

5.验证密码问题

/(?=.*\d)(?=.*[a-z])^\w{6,12}$/ 密码长度 6-12 位,由数字、小写字符和大写字母,下划线组成,但必须包括数字和英文。
先试验(?=.*[0-9])(?=.*[a-z])\b\w{6,12}\b,发现确实只匹配字母和数字的结合的密码:

在这里插入图片描述
具体原理:
只需要弄明白 (?=.*[0-9])^ 即可。分开来看就是 (?=.*[0-9])^

  1. ^表示开头前面的位置【也就是开头位置,因为位置都是空字符串,n个位置叠加起来还是一个位置】。
  2. .*[0-9],表示有0~n个任意字符,后面再跟一个数字。【也就是数字位置是任意的,可以在密码的开头,也可以在中间】
  3. (?=.*[0-9])^ 表示在字符串开头位置的后面(也就是整个字符串中),必须要有.*[0-9]——一个任意位置的数字,也就是这串密码必须有数字。

6.邮箱字符串判断

邮箱前面的域名可能没有.xxx,数量为0-n;后面的域名格式一定为xxx.xxx,.xxx数量为1-n

function isAvailableEmail(sEmail) {
   
    if(sEmail.length<5){
   
        return false;
    }
    return /^\w+(\.\w+)*@\w+(\.\w+)+$/.test(sEmail);
    
}

7.身份证

/^(\d{15}|\d{17}[\dxX])$/
判断是否包含数字

var num =/\d/;
return num.test(str);

8.不匹配任何东西

/.^/

9.检查重复字符串

给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
只能通过反向引用来检查

function containsRepeatingLetter(str) {
   
    if(str.length<=1){
   
        return false;
    }
    return /([a-zA-Z])\1/.test(str);

}

10.检查重复单词

\b(\w+)\b\s+\1\b

11.判断是否以元音字母结尾

给定字符串 str,检查其是否以元音字母结尾
1、元音字母包括 a,e,i,o,u,以及对应的大写
2、包含返回 true,否则返回 false
注意如果用分支,需要用括号,否则$会跟随最后一个分支

function endsWithVowel(str) {
   
    if(str===""){
   
        return false;
    }
    return /[aeiouAEIOU]$/.test(str)

}

12.判断字符串是否为XXX-XXX-XXXX格式

function matchesPattern(str) {
   
    if(str.length<12){
   
        return false;
    }
    return /^\d{
   3}-\d{
   3}-\d{
   4}$/.test(str);  

}

13.判断是否符合 USD 格式

给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3

function isUSD(str) {
   
    if(str.length<=1){
   
        return false;
    }
    return /^\$[1-9]\d{
   0,2}(,\d{
   3})*(\.\d{
   2})?$/.test(str);

}

$,.需要转义
第一部分:[1-9]\d{0,2},首位不能为0,可能为1-3位
第二部分:(,\d{3})*,逗号➕三位数字,可能出现0-n次
第三部分:(\.\d{2})?,小数点➕小数点后两位,可能出现0-1次

14.模拟一个正则表达式匹配函数test

题目描述 https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。
正则表达式分成四部分:[+-]? 匹配符号,\d* 匹配小数点前的数字,(\.\d+)?匹配小数点后的数字,([eE][+-]?\d+)?e和e部分以后的指数。

function isNumeric(s) {
   
  // write code here
  return /^[+-]?\d*(\.\d+)?([eE][+-]?\d+
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值