超详细的正则表达式的使用方法,学不会找我

news2024/11/17 9:50:59

正则表达式的基本使用

前言: 在我们开发过程中,有很多地方需要用到正则表达式。如验证用户登录信息、手机号、邮箱地址等等。那你都会正则表达式的哪几个方法呢?

首先,我们要知道什么是正则表达式。

正则表达式的定义:

  • 正则表达式 RegExp (regular expression) 是ECMAScript内置对象,是一个用于对字符串实现逻辑匹配运算的对象

正则表达式的作用:

  • 按照某种规则来匹配字符串,而正则表达式就是制定这个规则

如何使用正则表达式

  • (1) 创建正则表达式对象
  • (2) 开始匹配 使用test()方法

由于正则表达式非常的晦涩难懂,使用图形可以更好的方便理解,正所谓一图胜千言!
正则表达式图形化网站:https://regexper.com/

下面就让我们步入正题,开始学习正则。

1、元字符与原义文本字符

一个正则表达式主要由两部分组成:

  1. 原义文本字符 : 就是字符本身的含义,千万别想多

     /abc/
     // 含义,就是检查字符串中有没有abc。 别想多了
     // 不是说有a或者有b或者有c,也不是说有a 和 b 和 c
     console.log(/abc/.test('a123'));//false
     console.log(/abc/.test('ab123c'));//false
     console.log(/abc/.test('abc123'));//true
    
    
  2. 元字符 : 改变了字符串本身的含义 (相当于 js 的关键字)

     . \ | [] {} () + ? * $ ^
    

2、字符类

有时候我们并不想只匹配一个字符,而是想要匹配符合某一类特征的字符,这时就可以使用字符类

1、简单字符类:[]

在这里插入图片描述

 /[abc]/ 
 // 把字符a或b或c归为一类,可以匹配这类的字符
 // 含义是,匹配字符串中只要有 a或者b或者c任何一个即可
 console.log ( /[abc]/.test ( "eeeeefffff" ) );//false
 console.log ( /[abc]/.test ( "eaeeffffff" ) );//true
 console.log ( /[abc]/.test ( "ebeeeffffff" ) );//true
2、反向类(负向类):^

在这里插入图片描述

// 反向类意思是不属于某类的内容
/[^abc]/ 
// 含意是,不是字符a或b或c的内容
// 只要有任何一个字符不是a或者b或者c,就满足条件
console.log ( /[^abc]/.test ( "1abacbc" ) );//true
console.log ( /[^abc]/.test ( "aaabbbcccc" ) );//false
console.log ( /[^abc]/.test ( "aaabbbcccce" ) );//true

3、范围类: -

在这里插入图片描述
在实际开发中,如果我们需要匹配所有的数字, 可以写[0123456789] : 含义是,有任何数字的内容。如果这样写,表达式就很冗余,假如我要匹配字母,那就要写 [abcdefg…xyz],非常麻烦。
那么如何解决呢?可以使用范围类 -

[0-9] : 含义是, 0-9之间的任意字符
[a-z]: 含义是,a-z之间的任意字符
[A-Z]:含义是,A-Z之间的任意字符

console.log ( /[0-9]/.test ( "1acasdas" ) );//true  只要有数字就满足
console.log ( /[0-9]/.test ( "acasdas" ) );//false

注意:

  1. 范围类是一个闭区间, [a-z],这个范围包含字符a和z本身
  2. 在[]内部是可以连写的, [0-9a-zA-Z] : 含义是,包含数字0-9,或者a-z,或者A-Z任意字符
  3. 右边一定要大于左边,例如 [5-8],这是合法的,表示5-8之间的数字,不能写[8-5],程序会报错(正则语法错误)

4、预定义类

在这里插入图片描述

  1. . :除了回车和换行之外的所有字符
console.log ( /./.test ( "\r\n" ) );//false
console.log ( /./.test ( "" ) );//false 空字符
console.log ( /./.test ( " " ) );//true 空格字符
  1. \d 数字字符(只要有数字即可)
console.log ( /\d/.test ( "123abc" ) );//true
console.log ( /\d/.test ( "abc" ) );//false
  1. \D 非数字字符(只要没有数字即可)
console.log ( /\D/.test ( "123abc" ) );//true
console.log ( /\D/.test ( "123" ) );//false
  1. \s 空白字符(只要有空白字符即可)
console.log ( /\s/.test ( "\nabc" ) );//true
console.log ( /\s/.test ( "abc" ) );//false
  1. \S 非空白字符(只要有非空白字符即可)
console.log ( /\S/.test ( "\nabc" ) );//true
console.log ( /\S/.test ( "abc" ) );//true
console.log ( /\S/.test ( "" ) );//false
console.log ( /\S/.test ( "\t\n" ) );//false
  1. \w 单词字符(只要有字母、数字、下划线即可)
console.log ( /\w/.test ( "abc123_中国" ) );//true
console.log ( /\w/.test ( "中国" ) );//false
  1. \W 非单词字符(只要有除字母、数字、下划线之外的任意字符即可)
console.log ( /\W/.test ( "abc123_中国" ) );//true
console.log ( /\W/.test ( "中国" ) );//true
console.log ( /\W/.test ( "abc123_" ) );//false

记忆技巧:
字母是小写,表示是肯定的规则。
字母是大写,表示是否定的规则。

5、边界

严格匹配: ^字符串$
例如: ^abc$ : 含义是,字符串必须以a开头,中间必须是b,结尾必须是c
满足该条件的只有一个字符串: abc
在这里插入图片描述
正则表达式还提供了几个常用的边界匹配字符:

 ^                   以xxxx开头
 $                   以xxxx结束
 \b                  单词边界
 \B                  非单词边界
1、 ^ 以xxxx开头

这里容易记混的知识点:
[^] : 负向类,有取反的意思。 例如[^abc] : 不包含abc的任意字符
/^/:边界,以xxxx开头。 例如/^\d/ : 以数字开头的任意字符
在这里插入图片描述

/^abc/ : 以a开头,后面是bc的字符  
(不是以abc开头,虽然最终结果一样,但是含义不同)
console.log ( /^abc/.test ( "a" ) );//false
console.log ( /^abc/.test ( "abc" ) );//true
console.log ( /^abc/.test ( "abc123" ) );//true

/^\d/ : 以任意数字开头的任意字符
console.log ( /^\d/.test ( "1abc" ) );//true
console.log ( /^\d/.test ( "a1bc" ) );//false
2、 $ 以xxxx结束
/b$/   : 结尾是b的任意字符
console.log ( /b$/.test ( "b" ) );//true
console.log ( /b$/.test ( "abc" ) );//false
console.log ( /b$/.test ( "acb" ) );//true

/^ab$/ : 以a开头 + 以b结尾的字符  (言外之意:只能是ab)
console.log ( /^ab$/.test ( "ab" ) );//true
console.log ( /^ab$/.test ( "acb" ) );//false
3、 \b 单词边界(晦涩难懂,用的不多)

单词: 由\w(字母数组下划线)组成的一串字符
边界:指的是某一个位置,而不是字符

// 将单词is替换成XX
console.log ( "this is a girl".replace ( /\bis/, "XX" ) )// this XX a girl

// 将非单词is替换成XX
console.log ( "this is a girl".replace ( /\Bis/, "XX" ) )// thXX is a girl

6、量词

在这里插入图片描述

量词: 表示字符出现的数量

量词                  含义
?                    出现零次或一次(最多出现一次)
+                    出现一次或多次(至少出现一次)
*                    出现零次或多次(任意次)
{n}                  出现n次
{n,m}                出现n-m次
{n,}                 出现至少n次(>=n)

需求:匹配一个连续出现10次数字的字符
正则表达式: /\d\d\d\d\d\d\d\d\d\d/
弊端:表达式冗余 解决方案:使用量词

console.log ( /\d{10}/.test ( "1234567abc" ) );//false
console.log ( /\d{10}/.test ( "1234567890abc" ) );//true

7、分组

在这里插入图片描述

1、()

这个元字符有三个含义

  • 分组:使量词作用于分组
    • 量词只能作用于一个字符,如果想作用与多个字符,就要使用分组(将多个字符当成一组)
  • 提升优先级:通常与元字符 | 一起使用
  • 反向引用
// 需求: 匹配连续出现三次love的字符串 - lovelovelove
// 1.错误写法:  /love{3}/  , 含义: lov + e{3}
console.log ( /love{3}/.test ( "lovelovelove" ) );//false
console.log ( /love{3}/.test ( "loveee" ) );//true
console.log ( /love{3}/.test ( "loveeeabc" ) );//true

//2.正确做法:使用分组   /(love){3}/
console.log ( /(love){3}/.test ( "lovelovelove" ) );//true
console.log ( /(love){3}/.test ( "loveee" ) );//false
2、|
// 1.错误写法:  /lo|ive/  ,含义:  lo  或者  ive
console.log ( "I love you".replace ( /lo|ive/, "X" ) );// I Xve you
console.log ( "I live you".replace ( /lo|ive/, "X" ) );// I lX you

//2.正确写法: /l(o|i)ve/, 含义:匹配love 或者 live
console.log ( "I love you".replace ( /l(o|i)ve/, "X" ) );// I X you
console.log ( "I live you".replace ( /l(o|i)ve/, "X" ) );// I X you

8、修饰符

修饰符:影响整个正则规则的特殊符号

书写位置:  /pattern/modifiers(修饰符)
i (intensity):大小写不敏感(不区分大小写)
g (global) : 全局匹配
m(multiple) : 检测换行符,使用较少,主要影响字符串的开始^与结束$边界
1、i

i:不区分大小写

let str = 'ABCabcdefgaaaAAA';
console.log ( str.replace ( /a/, "X" ) );//ABCXbcdefgaaaAAA   //默认区分大小写
console.log ( str.replace ( /a/i, "X" ) );//XBCabcdefgaaaAAA
2、g

g : 全局匹配

let str = 'ABCabcdefgaaaAAA';
console.log ( str.replace ( /a/, "X" ) );//ABCXbcdefgaaaAAA   //默认匹配第一个就停止
console.log ( str.replace ( /a/g, "X" ) );//ABCXbcdefgXXXAAA   //默认匹配第一个就停止
//修饰符可以同时使用多个
console.log ( str.replace ( /a/ig, "X" ) );//XBCXbcdefgXXXXXX
3、 m

m: 检测换行符 主要针对边界^与$

//需求:将下列字符串中每一行开头的字符变成0
let str = "aascdascd\nwebdfbdfbdfbfd\ngcsdfcwdfwfwe";
console.log ( str );//虽然在控制台看到三行字符串,实际上代码中每一行只是一个换行符\n
console.log ( str.replace ( /^\w/g, "0" ) );//错误    只能替换第一个字符
/*注意不要漏掉了全局匹配g*/
console.log ( str.replace ( /^\w/gm, "0" ) );//正确    能替换每一行第一个字符,m能检测换行符把\n后i面字符作为单独一行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

节流还在用JS吗?CSS也可以实现哦

函数节流是一个我们在项目开发中常用的优化手段,可以有效避免函数过于频繁的执行。一般函数节流用在scroll页面滚动,鼠标移动等。 为什么需要节流呢,因为触发一次事件就会执行一次事件,这样就形成了大量操作dom,会出现卡顿的情况…

ES6模块化(默认导入导出、按需导入导出、直接导入)

一、介绍ES6模块化 ES6 模块化规范是浏览器端与服务器端通用的模块化规范,ES6模块化的出现前端开发者不再需要额外的学习其他的模块化规范。 二、ES6 模块化规范中定义: 1.每个 js 文件都是一个独立的模块 2.导入其它模块成员使用 import 关键字 3.向外…

React组件——类组件

一、组件的概念 使用组件的方式进行编程,可以提高开发效率,提高组件的复用性、提高代码的可维护性和可扩展性 React定义组件的方式有两种 类组件:React16.8版本之前几乎React使用的都是类组件 函数组件:React16.8之后,函数式组件使用的越…

2023高频前端面试题(含答案)

一、简单页面 1、CSS选择器样式优先级 2、CSS实现三列布局(左右固定宽度,中间自适应) (1)CSS浮动 第一个float:left,第二个float:right,第三个设置margin-left和margin-right (2&am…

什么是Mixin?带你了解Vue中的Mixin混入

什么是Mixin?本篇文章带大家了解一下Vue中的Mixin混入,介绍Mixin和Vuex的区别,Mixin的使用方法,希望对大家有所帮助! Vue框架现在基本上已经占据了前端的半壁江山,Vue的数据驱动和组件化的思想深入人心。Vu…

web前端-JavaScript中的数组详解

🐚作者简介:苏凉(专注于网络爬虫,数据分析,正在学习前端的路上) 🐳博客主页:苏凉.py的博客 🌐系列总专栏:web前端基础教程 👑名言警句&#xff1a…

我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印,结果...

我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印介绍ChapGPT 听起来好得令人难以置信,所以让我们让它为我们编写一些 JS 代码。我想看看它是否可以解决我作为前端开发人员每天所做的任务。是驴子是马拉出来溜溜,我们还是直接进入主题一探究…

Vite + Vue3 +Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案

Vite Vue3 Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案 文章目录Vite Vue3 Vant4构建项目时,按需引入使用Toast组件,引用 showToast 时出现编译报错的解决方案一.问题定位二.以下为完整解决…

React+Mobx|基本使用、模块化

欢迎来到我的博客 📔博主是一名大学在读本科生,主要学习方向是前端。 🍭目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 🛠目前正在学习的是🔥 R e a c t 框架 React框架 Reac

【小程序项目开发 -- 京东商城】uni-app 商品分类页面(上)

🤵‍♂️ 个人主页: 计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 🌐 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推| 还没有账户的小伙伴 速速点击链接…

前端 --- HTML

文章目录1. HTML 结构1.1 HTML 文件基本结构1.2 VsCode 中 使用 HTML 的快捷键2. HTML 常见标签2.1 注释标签2.2 标题标签2.3 段落标签2.4 换行标签2.5 格式化标签2.6 图片标签2.7 超链接标签2.8 表格标签2.9 列表标签2.10 表单标签form 标签input 标签① 文本框② 密码框③ 单…

Vue中实现路由跳转的三种方式详细分解

vue中实现路由跳转的三种方式 目录 vue中实现路由跳转的三种方式 一、使用vue-router 1.下载vue-router模块到当前工程 2.在main.js中引入VueRouter函数 3.添加到Vue.use()身上 – 注册全局RouterLink和RouterView组件 4.创建路由规则数组 – 路径和组件名对应关系 5…

CSS flex布局最后一行左对齐的常用方法

一、justify-content 在CSS flex布局中,justify-content属性定义了浏览器之间,如何分配顺着弹性容器主轴 (或者网格行轴) 的元素之间及其周围的空间,可以控制列表的水平对齐方式, justify-content: center; /* 居中排列 */ …

Visual Studio 2022 给创建的类/接口加头注释

Visual Studio 2022 给类加注释 找到文件路径 一般在C盘: C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 如图: 修改这个.cs文件 using System; using System.Collections.Generic…

Linux驱动开发——串口设备驱动

Linux驱动开发——串口设备驱动 一、串口简介 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距…

C++ Linux Web Server 面试基础篇-计网(一)

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

纯代码22步绘制唯美的日夜交替动画(原生HTML+CSS+JS实现,CV即可运行+保姆级步骤教程)

文章目录前言一、HTML(index.html)1. 加入元素二、CSS(style.css)2. 重置浏览器样式3.设置字体样式4.将我们的元素居中5.设置背景颜色6.设置动画显示的位置7.设置夜晚时的背景色8.将动画显示的区域设置为圆型9.绘制白天时天空的样子10.绘制夜晚时天空的样子11.创建昼夜交替动画…

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

vue3 项目搭建教程(基于create-vue,vite,Vite Vue) 目录 一、搭建vue3 项目前提条件 二、通过create-vue搭建vue3 项目 三、搭建一个 Vite 项目 四、构建一个 Vite Vue 项目 五、打开Vue 项目管理器 六、Vite Vue 项目目…

Vue.js笔记------事件

一、事件与事件流 1、事件与事件流 【事件】 JavaScript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性。常见的有加载事件、鼠标事件。 【事件流】 由于DOM是一个树结构,如果在父子节点绑定事件时候&am…

前端使用xlsx导出数据生成Excel文件

xlsx的使用安装 xlsx引入 xlsx需要导出的数据源将数据源转成需要的二维数组定义 Excel 表头将定义好的表头添加到 body 中1 创建虚拟的 workbook2 将二维数组转成 sheet!merges 设置单元格合并!cols 设置列宽!rows 设置行高3 向 workbook 中添加 sheet4 导出 workbook 完整示例…