前端正则表达式基础整理

1,474 阅读2分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

1.正则表达式:

正则表达式,顾名思义,用来处理字符串的规则。

  • 只能作用于字符串

  • 用来验证(test)某个字符串是否符合规则,也可以用来获取(match/exec)符合规则的字符串

let go1 = 'nba star kobe24';
let reg1 = /\d+/;
let test1 = reg1.test(go1);
console.log('test1',test1); //true
//\d代表任何一个0-9之间的数字; +表示出现1到多次;所以”\d+“表示是否出现了连续的数字

// 捕获
let get1Str = '2022-11-14';
let get1 = reg1.exec(get1Str);
console.log('get1',get1); // ["2022"] 

2.正则表达式的编写:

创建正则表达式分为两种方式:

  • 字面量创建

    let createReg1 = /\d+/;
    
  • 构造函数创建(个别可能需要转译)

    • 元字符字符串
    • 修饰符字符串
    // 构造函数:元字符字符串,修饰符字符串
    let createReg2 = new RegExp('\\d+',); 
    

3.常见的元字符:

元字符分为3类:下面以表格的形式整理了常见的元字符

  • 量词元字符

    量词元字符:符号释义:
    *0-多次
    +1-多次
    ?0次或者1次
    {n}出现n次
    {n,}出现n-多次
    {n,m}出现n-m次
  • 特殊元字符

    特殊元字符:符号释义:
    \转义字符,普通->特殊->普通
    .除了"\n"(换行符)以外的任意字符
    以哪个元字符作为开始
    $以哪个元字符作为结束
    \n换行符
    \d0-9之间的一个数字
    \D非0-9之间的一个数字
    \w数字、字母、下划线中任意一个字符
    \s一个空白字符(包含空格、制表、换页符)
    \t制表符(一个tab键)
    \b匹配一个单词的边界
    x|yx或者y中的一个字符
    [xyz]x或者y或者z中的一个字符
    [^xy]除了x或者y以外的字符
    [a-Z]指a-z这个范围中的任意字符
    [^a-Z]上一个取反
    ()正则中的分组
    (?:)只匹配不捕获
    (?=)正向预查
    (?!=)负向预查
  • 普通元字符

/yss/这个正则匹配的就是yss

4.元字符详细解析:

下面这个就是对上面表格中元字符使用的讲解和使用小例子

1.^和$:

//
let reg = /^kobe/;
reg.test('24kobe'); //fasle
reg.test('kobe24'); //true
// ^和$两个都不加,字符串中包含符合规则的内容即可
let reg = /\d+/;
reg.test('24kobe')//true;

// ^/$两个都加:字符串只能是符合规则一致的内容
let reg2 = /^\d+$/;

//以11位手机号为例(第一个数字为1即可)
let reg3 = /^1\d{10}$/;
  • ^和$两个都不加,字符串中包含符合规则的内容即可
  • ^/$两个都加:字符串只能是符合规则一致的内容
let reg = /^6.7$/;
reg.test("6.7") // true
reg.test("6&7") // true
reg.test("67") //false
  • 这里需要注意下.的意思(对照上面表格即可)

2.转译 "\":

let string = "\d";
reg = /^\d$/; //这种方式不能匹配的
reg = /^\\d$/; //得需要添加转义字符"\""
  • 一些元字符需要添加\进行转译,把特殊的符号转为普通

3.分组():

使用分组()来改变优先级

let kobeNum = '8'
let reg= /^(8|24)$/;
reg.test(kobeNum)//true

4.中括号中不存在多位数

中括号[]中不存在多位数,如下图例子:

let reg = /^[24]$/;
console.log(reg.test('2'));//true
console.log(reg.test('4'));//true
console.log(reg.test('24'));//false

5.常用正则表达式:

1.验证常用有效数字:

规则分析:

  • 可能出现+-号,也可能不出现 ---> [+-]? 或者(+|-)?
  • 一位数时,0-9都可以;多位数时,0不能做首位。--->(\d|([1-9]\d+))
  • 小数部分可能可能没有,有的话,后面必须是小数点 + 数字(\.\d+)?
let reg = /^(+|-)?(\d|([1-9]\d+))(\.\d+)?$/;

2.验证密码:

规则分析:

  • 数字、字母、下划线
  • 6-16位
var pwd = 'asdf@1234';
let pwdReg = /^\w{6,16}$/;

3.验证用户名:

规则分析:

  • 汉字 --->/^[\u4E00-\u9FA5]$/
  • 名字长度2-10位
  • 可能有译名·汉字
let reg = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{0,2})$/

正则表达式的学习,只有将元字符梳理清楚,才能够达到看得懂,然后到会用的地步,笔者这里也只是整理下。感谢您的观看,也感谢我家莎老板