快速掌握 ==== js 正则表达式

git 地址
https://gitee.com/childe-jia/reg-test.git

背景

在日常开发中,我们经常会遇到使用正则表达式的场景,比如一些常见的表单校验,会让你匹配用户输入的手机号或者身份信息是否规范,这就可以用正则表达式去匹配。相信大多数人在碰到这种场景的时候都是直接去网上找,然后一顿 cv 操作就过去了,下次再遇到相同的问题时,又是重复一遍之前的操作。

正则作为一个用途比较广泛的技术,理应被我们所掌握,而不是每次都只有在需要用到的时候临时去网上查找,如果出了问题你也找不到问题出在哪。我们今天的课程就会教大家如何去使用正则表达式,不光能看懂别人写的,也可以自己去写一些常见的正则表达式。

什么是正则表达式?

  • 正则表达式是用于匹配字符串中字符组合的模式。许多语言都支持正则表达式,在 JavaScript 中,正则表达式也是对象。

  • 就是用来匹配字符串的规则

    1. 判断一个字符串中是否包含有某个字符或者某个字符串

      找出字符串’000000O0000000’中是否有大写字母 O

    2. 判断用户输入的手机号是否合法

在这里插入图片描述

正则表达式的语法

语法

定义一个正则表达式

const 变量名 = /表达式/;

比如:

const reg = /前端/;
  • test() - 用来查看正则表达式与指定的字符串是否匹配
const reg = /前端/;
reg.test("学前端,来黑马"); // true
  • exec() - 查找符合规则的字符串
const reg = /前端/;
const str = "学前端,来黑马,前端工资高,就业前景好";
console.log(reg.exec(str)); // ['前端', index: 1, input: '学前端,来黑马,前端工资高,就业前景好', groups: undefined]
  • replace() - 用来替换字符串中符合规则的字符
const reg = /java/;
const str = "学java,来黑马";
str.replace(reg, "前端"); // '学前端,来黑马'
  • match() - 可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
const reg = /前端/g;
const str = "学前端,来黑马,前端工资高,就业前景好";
str.match(reg); // ['前端', '前端']
修饰符

修饰符约束正则执行的某些细节行为,如是否区分大小写、是否全局匹配

修饰符说明
i单词 ignore 的缩写,正则匹配时字母不区分大小写
g单词 global 的缩写,匹配所有满足正则表达式的结果
// i
console.log(/a/.test("A")); // false
console.log(/a/i.test("A")); // true

// g
const str = "hello world";
str.replace(/o/, "_"); // hell_ world
str.replace(/o/g, "_"); // hell_ w_rld
元字符
普通字符

大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。

元字符

是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能

比如:匹配 26 个英文字母,用普通字符表示 abcde…xyz,但是用元字符表示的话,只需要 [a-z]

  1. 边界符

    (1)单词边界

    找出某句话中的某个单词,例如:The cat scattered his food all over the room.

    想找到cat这个单词,但是如果只是使用/cat/这个正则,就会同时匹配到catscattered这两处文本,这时候就可以用到单词边界\b,它其实匹配的是能构成单词的字符(\w)和不能构成单词的字符(\W)中间的那个位置。

    // 这个正则就只会匹配到单词cat而不会匹配到scattered了
    const reg = /\bcat\b/;
    

    (2)字符串边界

    边界符说明
    ^表示匹配行首的文本
    $表示匹配行尾的文本

    注意:如果^ 和 $ 在一起,表示必须是精确匹配

  2. 量词:表示某个模式出现的次数

    量词说明
    *重复 0 次或更多次
    +重复 1 次或更多次
    ?重复 0 次或 1 次
    {n}重复 n 次
    {n,}重复 n 次或更多次
    {n,m}重复 n 到 m 次

    注意:逗号两侧不能出现空格

  3. 字符类

    (1)[ ] 匹配字符集合

    // 后面的字符串只要包含 abc 中任意一个字符
    const reg1 = /[abc]/;
    console.log(reg1.test("andy")); // true
    console.log(reg1.test("baby")); // true
    console.log(reg1.test("cry")); // true
    console.log(reg1.test("dad")); // true
    
    // 使用连字符 - 表示一个范围
    const reg2 = /[a-z]/; // 匹配26个英文小写字母中的任意一个
    const reg3 = /[a-zA-Z]/; // 匹配26个英文字母中的任意一个,大小写都可以
    const reg4 = /[0-9]/; // 匹配0-9中的数字
    
    // []里面加上^表示取反,注意要写到中括号里
    const reg5 = /[^a-z]/; // 表示匹配除了26个小写字母以外的字符
    

    (2). 匹配除换行符之外的任意单个字符

    const reg = /./; // 匹配除换行符之外的任何单个字符
    reg.test("aaa"); // true
    reg.test("123"); // true
    reg.test("\n"); // false
    

    (3)预定义:指的是某些常见模式的简写方式。

    预定类说明
    \d匹配 0-9 之间的任意数字,相当于[0-9]
    \D匹配 0-9 以外的任意字符,相当于[ ^0-9]
    \w匹配任意的字母,数字和下划线,相当于[a-zA-Z0-9_]
    \W匹配除字母,数字和下划线以外的字符,相当于[ ^a-zA-Z0-9_]
    \s匹配空格(包含换行、空格、制表符等),相当于[\t\r\n\v\f]
    \S匹配非空格的字符,相当于[ ^\t\r\n\v\f]
分组和分支结构
分组

我们知道/a+/匹配连续出现的“a”,而要匹配连续出现的“ab”时,需要使用/(ab)+,其中括号是提供分组功能,使量词+作用于“ab”这个整体

const reg = /(ab)+/g;
const str = "abba abbb babbba";
str.replace(reg, "cd"); // 'cdba cdbb bcdbba'

分组捕获:例如将 YYYY-MM-DD 格式的日期替换成 MM/DD/YYYY

YYYY-MM-DD 的匹配模式为 /\d{4}-\d{2}-\d{2}/,是将整个日期作为一个组(group)匹配起来。 我们把这样的叫Group0

这个时候,如果我们上括号/(\d{4})-(\d{2})-(\d{2})/,那么分组就是下面的情况:

YYYY-MM-DD   Group0
YYYY         Group1
MM           Group2
DD           Group3

想要获取每个分组匹配的内容该怎么获取呢?可以通过$符号获取,比如$1 代表YYYY$2代表MM,所以完整的代码应该如下:

const reg = /(\d{4})-(\d{2})-(\d{2})/;
const date = "2023-01-05";
console.log(reg.test(date)); // true
console.log(date.replace(reg, "$2/$3/$1")); // 01/05/2023
分支结构

分支结构类似逻辑操作中的或操作,表示匹配规则 1 或者规则 2

const reg = /(java)|(前端)/;
const str1 = "学前端,来黑马";
const str2 = "学java,也可以来黑马";
reg.test(str1); // true
reg.test(str2); // true

案例

  1. 密码匹配(6-16 位字母、数字或者下划线)
const reg = /^[a-zA-Z0-9_]{6,16}$/;
  1. 匹配 16 进制颜色值(比如:#f0f0f0, #fff)
const reg = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/;
  1. 匹配 24 小时制的时间(比如:23:59,08:29)
const reg = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
  1. 手机号码脱敏
// 15812345678 => 158****5678
const reg = /(^1[3-9]\d)\d{4}(\d{4})/;
const mobile = "15812345678";
console.log(reg.test(mobile)); // true
console.log(mobile.replace(reg, "$1****$2")); // 158****5678

常用的正则的工具

  1. vscode 插件:any-rule

    功能:支持一键生成常见的正则表达式

  2. https://regexper.com/

    功能:可视化自己写的正则表达式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展,CSS3 为我们提供了丰富的动画效果,使得网页设计更加生动和有趣。今天,我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观,而且可以应用于各种网页元素,比如加载指示器或…

收集路径下的html并写到根目录index.html

我们可以用简单的脚本生成一个简单的导航页。 用于查看当前路径下所有的html。 #!/bin/bash index_root"/root/test/" cd ${index_root} echo "" > index.htmlecho "<html><head><title>Test Report Index</title></…

VBA 批量发送邮件

1. 布局 2. 代码 前期绑定的话&#xff0c;需要勾选 Microsoft Outlook 16.0 Object Library Option ExplicitConst SEND_Y As String "Yes" Const SEND_N As String "No" Const SEND_SELECT_ALL As String "Select All" Const SEND_CANCEL…

VSCode升级后不能打开在MacOS系统上

VSCode 在MacOS无法打开 版本 VSCode version: 1.91.0 (x64) 错误信息&#xff1a; MacBook-Pro ~ % /Users/mac/Downloads/FirefoxDownloads/Visual\ Studio\ Code.app/Contents/MacOS/Electron ; exit; [0710/142747.971951:ERROR:crash_report_database_mac.mm(753)] op…

网络建设与运维23国赛网络运维正式赛题解析

竞赛环境请看主页&#xff01; 23国赛网络运维 任务描述&#xff1a;某集团公司在更新设备后&#xff0c;路由之间无法正常通信&#xff0c;请修 复网络达到正常通信。 &#xff08;1&#xff09; 请在server1“管理员”下拉菜单中选择“镜像”选项卡&#xff0c;点 击 “创…

浪潮天启防火墙TQ2000远程配置方法SSL-xxx、L2xx 配置方法

前言 本次设置只针对配置VXX&#xff0c;其他防火墙配置不涉及。建议把防火墙内外网都调通后再进行Vxx配置。 其他配置可参考&#xff1a;浪潮天启防火墙配置手册 配置SSLVxx 在外网端口开启SSLVxx信息 开启SSLVxx功能 1、勾选 “启用SSL-Vxx” 2、设置登录端口号&#xff0…

扫描全能王AIGC“黑科技”亮相WAIC,《人民日报》、央视、新华社同时“点赞”

2024年世界人工智能大会&#xff08;WAIC&#xff09;于近期圆满闭幕。今年&#xff0c;合合信息旗下扫描全能王展台成为大会的“网红”&#xff0c;以AI古籍修复为代表的体验项目不仅赢得了专业观众的赞誉&#xff0c;也获得了包括CCTV-4、CCTV-13、《人民日报》、新华社、解放…

好用的IP反查接口(2)

IP-地理信息查询接口-本地化 参考&#xff1a; 通过Ip查询对应地址,Ip2location全球IP地址网段-CSDN博客 因为在线接口有限制&#xff08;毕竟别人提供服务&#xff0c;服务器&#xff0c;数据维护&#xff0c;域名啥的都要费用&#xff09;&#xff0c; 所以本地化服务的需…

【K8s】专题七(1):Kubernetes 服务发现之 Service

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本介绍 二、工作原理 三、对象类型 四、资源清单&#xff08;示例&#xff09; 五…

Java---SpringBoot详解一

人性本善亦本恶&#xff0c; 喜怒哀乐显真情。 寒冬暖夏皆有道&#xff0c; 善恶终归一念间。 善念慈悲天下广&#xff0c; 恶行自缚梦难安。 人心如镜自省照&#xff0c; 善恶分明照乾坤。 目录 一&#xff0c;入门程序 ①&#xff0c;创建springboot工程&#…

【Qt】QTabWidget的tab页隐藏问题

在Qt中&#xff0c;使用 ​ui->tab1->setHidden(true);​ 来隐藏一个 ​QTabWidget​ 的特定标签页可能不会达到预期的效果&#xff0c;因为 ​setHidden(true)​ 是用于隐藏整个 ​QWidget​ 的&#xff0c;而不是隐藏 ​QTabWidget​ 中的一个标签页。 要隐藏 ​QTabW…

Python高级(三)_正则表达式

Python高级-正则表达式 第三章 正则表达式 在开发中会有大量的字符串处理工作,其中经常会涉及到字符串格式的校验。 1、正则表达式概述 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、…

【深度好文】合作伙伴关系管理自动化:双向共赢新趋势

在当今快速变化的商业环境中&#xff0c;合作伙伴关系已成为企业成功的关键因素之一。为了更高效地管理这些关系&#xff0c;合作伙伴关系管理自动化正逐渐成为行业的新趋势&#xff0c;它不仅简化了管理流程&#xff0c;更促进了双方共赢的局面。 一、传统管理 VS 自动化管理 …

Spring系列二:基于XML配置bean 下

基于XML配置bean &#x1f496;配置bean后置处理器&#x1f496;通过属性文件配置bean&#x1f496;基于XML的bean的自动装配&#x1f496;Spring El 表达式配置Bean &#x1f496;配置bean后置处理器 1在spring的ioc容器, 可以配置bean的后置处理器 2.该 处理器/对象 会在bean…

【AI大模型】通义灵码的部署与使用

【AI大模型】通义灵码的部署与使用 目前已支持&#xff1a; JetBrains IDEsIDE 版本&#xff1a;IntelliJ IDEA、PyCharm、GoLand、WebStorm、Android Studio 等 2020.3 及以上操作系统&#xff1a;Windows 7 及以上、macOS、LinuxVisual Studio CodeIDE 版本&#xff1a;1.68.…

常见网页问题解决

用edge浏览器打印功能时&#xff0c;出现瞬间或加载几秒后突然闪退情况&#xff0c;本来以为是浏览器出了问题&#xff0c;去重置设置也没有&#xff0c;后来又下载了Chrome浏览器&#xff0c;没想到还是一样&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;想着…

亿发512版本更新,看数据驾驶舱、扫码拣货、UDI序列号的新功能

如果您正寻求突破传统业务模式的束缚&#xff0c;希望拥抱数字化转型带来的无限可能&#xff0c;我们诚邀您体验亿发软件。亿发专业团队将为您提供个性化的咨询和定制服务&#xff0c;帮助您的企业快速适应市场变化&#xff0c;实现业务模式和商业模式的创新。

07-7.5.1 散列表的基本概念

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

Centos7下zabbix安装与部署

Centos7下zabbix安装与部署 一、Zabbix介绍 1、zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 2、zabbix能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各…

2024最新版pycharm安装激火教程,附安装包+激huo马,Python教程,pycharm安装包!!

PyCharm的安装 PyCharm 是一个专门为 Python 开发者设计的 IDE&#xff0c;它同样具有代码导航、重构、调试和分析等功能。PyCharm 支持多种项目类型&#xff0c;如普通项目、Python 测试项目、Django 项目等&#xff0c;并提供了大量的内置模板和插件&#xff0c;以帮助您更快…