JS中正则表达式的语法与使用案例

JavaScript 中的正则表达式(Regular Expressions,简称 RegEx)是一种描述字符模式的对象,用于在字符串中进行模式匹配和替换操作。正则表达式在很多编程语言中都有广泛应用,而在 JavaScript 中,正则表达式主要通过两个对象实现:RegExp 对象和 String 对象上的一些方法。

基本语法

正则表达式通常用斜杠 / 包围,例如 /pattern/。它也可以通过 RegExp 构造函数来创建,例如 new RegExp('pattern')

修饰符
  • i:不区分大小写。
  • g:全局匹配(找到所有匹配项,而不是在找到第一个匹配项后停止)。
  • m:多行匹配。

例如,/abc/i 表示不区分大小写地匹配字符串 “abc”。

常见元字符

  • .:匹配除换行符以外的任何单个字符。
  • ^:匹配输入的开始。
  • $:匹配输入的结束。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:匹配前面的子表达式恰好 n 次。
  • {n,}:匹配前面的子表达式至少 n 次。
  • {n,m}:匹配前面的子表达式至少 n 次,至多 m 次。
  • [...]:匹配括号内的任意字符。
  • |:匹配左侧或右侧的子表达式(或操作)。

常见字符类

  • \d:匹配一个数字字符,等价于 [0-9]
  • \D:匹配一个非数字字符,等价于 [^0-9]
  • \w:匹配一个单词字符(字母、数字或下划线),等价于 [A-Za-z0-9_]
  • \W:匹配一个非单词字符,等价于 [^A-Za-z0-9_]
  • \s:匹配一个空白字符,包括空格、制表符、换页符等,等价于 [ \f\n\r\t\v]
  • \S:匹配一个非空白字符,等价于 [^ \f\n\r\t\v]

使用方法

正则表达式主要用于以下几种操作:

  1. 测试:检查字符串是否与模式匹配。

    let regex = /hello/i;
    console.log(regex.test("Hello World")); // true
    
  2. 搜索:在字符串中查找匹配项。

    let str = "Hello World";
    let match = str.match(/world/i);
    console.log(match); // ["World"]
    
  3. 替换:用新的子字符串替换匹配的子字符串。

    let str = "Hello World";
    let newStr = str.replace(/world/i, "JavaScript");
    console.log(newStr); // "Hello JavaScript"
    
  4. 提取:根据正则表达式提取子字符串。

    let str = "Hello 2024!";
    let year = str.match(/\d+/);
    console.log(year[0]); // "2024"
    

实际应用

  • 表单验证:验证用户输入的邮箱、电话号码、邮政编码等格式是否正确。
  • 文本搜索和替换:如在文本编辑器中查找和替换特定模式的文本。
  • 数据清理:清除数据中的多余空格、标点符号或其他不需要的字符。
  • 日志分析:从日志文件中提取特定信息,如日期、时间、IP 地址等。

示例

  1. 验证邮箱地址

    function validateEmail(email) {let regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;return regex.test(email);
    }
    console.log(validateEmail("example@example.com")); // true
    
  2. 提取 URL 中的参数

    let url = "http://example.com/?name=John&age=30";
    let params = {};
    url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(match, key, value) {params[key] = value;
    });
    console.log(params); // { name: "John", age: "30" }
    

正则表达式在文本处理和数据验证中非常强大,但由于其语法复杂,需要一些练习和经验才能熟练掌握和应用。

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

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

相关文章

【面试实战】# 并发编程之线程池配置实战

1.先了解线程池的几个参数含义 corePoolSize (核心线程池大小): 作用: 指定了线程池维护的核心线程数量,即使这些线程处于空闲状态,它们也不会被回收。用途: 核心线程用于处理长期的任务,保持最低的线程数量,以减少线程的创建和…

设备日志采集工具 1.1.0.2 发布

永久免费: Gitee下载 最新版本 使用说明: Moretl 企业级采集文件工具 主要更新内容 进一步提升工程师在设备上部署采集日志客户端效率. 浏览器打开根Url,自动跳转到部署页面.(之前工程师需要输入很长的部署页面Url);新增复制同类客户端同步任务功能.(同类设备采集同样的日志…

binlog和redolog有什么区别

在数据库管理系统中,binlog(binary log)和 redolog(redo log)是两种重要的日志机制,它们在数据持久性和故障恢复方面扮演着关键角色。虽然它们都用于记录数据库的变化,但它们的目的和使用方式有…

springboot中,将某个函数的日志单独输出的方法

背景 项目中有个节点健康检查扫描功能,每10秒扫描一次节点。 如果节点挂掉,会输出健康检查失败的日志。 测试环境,虽然配置了多个节点,但并没有都启动,所以在扫描的时候,会不断的出现报错, 对于…

【low-ui-vue】实现原生可扩展动态表格组件

本文字数:3520字 预计阅读时间:20分钟 所谓动态列的表格,就是列数不固定。像广为使用的elementUI的table组件就是表头写死的,这种也叫列数固定的表格。 01 效果 当然,动态性增加了,当然要做出一定“牺牲”。…

【前端vue3】TypeScrip-Class类用法

类型声明 TypeScrip定义Class类 语法: // 定义一个名为 Person 的类 class Person {constructor () {// 构造函数:稍后定义}run () {// 方法:稍后定义} }在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明 例…

csdn上传源码资源卖钱能买房买车吗?每天最高收入200-500?

csdn上传源码卖钱能买房买车吗,最高收入200-500? 作者收入日榜 不***孩 收益617.32元 程***妍 收益534.56元 s***n 收益323.71元 盈***客 收益315.05元 极***计 收益284.17元

2024-06-23 编译原理实验4——中间代码生成

文章目录 一、实验要求二、实验设计三、实验结果四、附完整代码 补录与分享本科实验,以示纪念。 一、实验要求 在词法分析、语法分析和语义分析程序的基础上,将C−−源代码翻译为中间代码。 要求将中间代码输出成线性结构(三地址代码&#…

企业级Web项目中应该如何做单元测试、集成测试和功能测试?

先自我介绍下: 本人有过10年测试经验,也参与过公安部网络安全产品测试交付、华为4G 网络设备测试交付、腾讯QQ空间APP产品测试交付。 关于“企业级Web项目中应该如何做单元测试、集成测试和功能测试”这个问题,我想给大家唠唠,我…

38 - 换座位(高频 SQL 50 题基础版)

38 - 换座位 -- 方法一 select(casewhen id%21 and id(select max(id) from seat) then idwhen id%20 then id-1else id1end) as id, student fromseat order byid;-- 方法二selectif(id%20,id-1,if(id(select max(id) from Seat),id,id1)) as id,student fromSeat order by id…

陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

陀螺仪LSM6DSV16X与AI集成.6--检测自由落体 概述视频教学样品申请源码下载主要内容生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程设置FIFO水印设置速率使用流模式设置FIFO时间戳批处理速率使能时间戳FIFO状态寄存器演示…

Django数据驾驶舱

Django数据驾驶舱 1.项目介绍2.项目结构3.库表结构3.1 appcsdn的models3.2 appssq的models3.3 appweather的models3.4 appweibo的models 4.功能展示5.解决问题5.1 路由配置5.2 后端数据与前端echarts展示5.3 长图表丝滑滚动条 6.遗留问题7.资源分享 1.项目介绍 这里介绍本人最…

阿里云发送验证码流程

目录 1. 阿里云短信服务简介 2. 阿里云验证码发送流程 2.1 申请阿里云短信服务 2.2 短信模板及阿里云秘钥 1.开发者可以在自己的应用程序中集成短信发送功能。绑定发起测试的手机号,需要绑定的手机号才能成功发送验证码,其他的用户手机号发送的验…

Java中的JVM调优技巧

Java中的JVM调优技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Java虚拟机(JVM)是Java应用程序的核心组件,负责将Jav…

如何在 Ubuntu 12.04 VPS 上安装和配置基本的 LDAP 服务器

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 LDAP(轻量级目录访问协议)是一种通过文件和目录层次结构管理相关信息的协议,它可以从集中位置管…

【4003】基于springboot实现的线上阅读系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

ARM裸机:基础了解

ARM的几种版本号 ARM内核版本号 ARMv7 ARM SoC版本号 Cortex-A8 芯片型号 S5PV210 ARM型号的发展历程 m microcontroller微控制器 就是单片机 a application应用级处理器 就是手机、平板、电脑的CPU r realtime实时处理器 响应速度快,主要用在工业、航天等领域 soc 、cpu、…

ubutu 18.04源码编译安装freeswitch 1.10.7支持视频通话——筑梦之路

软件版本说明 ubuntu版本18.04:https://releases.ubuntu.com/18.04.6/ubuntu-18.04.6-live-server-amd64.iso freeswitch 版本1.10.7:https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.7.-release.tar.gz spandsp包:https:…

Gone框架介绍30 - 使用`goner/gin`提供Web服务

gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 使用goner/gin提供Web服务 文章目录 使用goner/gin提供Web服务注册相关的Goners编写Controller挂载路由路由处理函数io.Rea…

VB计算圆柱体积和表面积

已知圆半径和圆柱的高,计算圆柱体积和表面积。 Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickConst PI 3.14159Dim r As Integer, h As IntegerDim t As Single, s As Singler Val(TextBox1.Text)h V…