【Java 进阶篇】JavaScript 正则表达式(RegExp)详解

在这里插入图片描述

JavaScript 正则表达式,通常简写为 RegExp,是一种强大的文本匹配工具,它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛,不仅限于 JavaScript,在许多编程语言中也都有类似的实现。

什么是正则表达式

正则表达式,简称正则或RegExp,是一个用于描述字符模式的对象。这个模式可以用来匹配字符串中的字符,用于查找、替换、切割或验证字符串。正则表达式是一种强大的工具,可用于执行各种文本处理任务。

在正则表达式中,你可以指定要匹配的文本模式,这些文本模式可以包括普通字符(例如字母、数字、符号)、特殊字符和元字符。正则表达式的模式可以非常简单,如匹配一个固定的单词,也可以非常复杂,如匹配一个复杂的文本结构。

正则表达式的语法和模式

正则表达式的模式是由各种字符组成的,这些字符可以用来描述文本模式。下面是一些正则表达式中常用的字符和元字符:

  • 普通字符:表示自身的字符,如字母、数字、符号等。
  • 特殊字符:具有特殊含义的字符,如.*+?等。
  • 元字符:具有特殊功能的字符,如^$|()[]{}等。
  • 量词:用于指定重复次数的字符,如*+?{n}{n,}{n,m}等。

正则表达式的模式用于描述你要查找或匹配的文本,这个模式可以包含上述各种字符,并通过组合它们来构建更复杂的匹配规则。

创建正则表达式

在 JavaScript 中,你可以使用两种方式来创建正则表达式对象:

  1. 字面量方式:使用两个正斜杠(/)包围正则表达式模式。

    var pattern = /hello/;
    
  2. 构造函数方式:使用 RegExp 构造函数来创建正则表达式对象。

    var pattern = new RegExp("hello");
    

这两种方式都会创建一个表示 hello 文本模式的正则表达式对象。

正则表达式的匹配方法

JavaScript 提供了一些方法来执行正则表达式的匹配操作,最常用的方法是:

  • test() 方法:测试字符串是否匹配正则表达式,返回布尔值。

    var pattern = /hello/;
    var text = "hello, world!";
    var isMatch = pattern.test(text); // true
    
  • exec() 方法:在字符串中查找匹配的文本,返回一个数组,包含匹配的文本和匹配的索引。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = pattern.exec(text);
    // result 包含匹配的文本和索引
    
  • match() 方法:在字符串中查找匹配的文本,返回一个数组,包含所有匹配的文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = text.match(pattern);
    // result 包含所有匹配的文本
    
  • search() 方法:在字符串中查找匹配的文本,返回匹配的第一个字符的索引。

    var pattern = /lo/;
    var text = "hello, world!";
    var index = text.search(pattern); // 3
    
  • replace() 方法:替换字符串中的匹配文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var newText = text.replace(pattern, "Hi");
    // newText 包含替换后的字符串
    

这些方法都接受一个正则表达式作为参数,并在字符串中执行匹配操作。

正则表达式的修饰符

正则表达式可以使用修饰符来修改匹配行为。JavaScript 中的修饰符包括:

  • i 修饰符:执行不区分大小写的匹配。

    var pattern = /hello/i;
    var text = "Hello, world!";
    var isMatch = pattern.test(text); // true
    
  • g 修饰符:执行全局匹配,匹配所有出现的文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = text.match(pattern); // 包含所有匹配的文本
    
  • m 修饰符:执行多行匹配,用于匹配多行文本。

    var pattern = /^hello/m;
    var text = "hello, world!\nHello, universe!";
    var isMatch = pattern.test(text); // true
    

正则表达式中的特殊字符

正则表达式中有一些特殊字符,它们具有特殊含义,用于构建复杂的匹配规则。以下是一些常见的特殊字符:

  • .:匹配除换行符之外的任何字符。

  • *:匹配前一个元素零次或多次。例如,a* 可以匹配空字符串、aaaaaa 等。

  • +:匹配前一个元素一次或多次。例如,a+ 可以匹配aaaaaa 等,但不能匹配空字符串。

  • ?:匹配前一个元素零次或一次。例如,a? 可以匹配空字符串或a

  • ^:匹配字符串的开头。

  • $:匹配字符串的结尾。

  • |:表示逻辑或,用于分隔多个模式。

  • ():用于捕获分组,可以将匹配的文本保存到变量中。

  • []:用于创建字符类,匹配其中的任何一个字符。

  • {}:用于指定重复次数,例如{n}{n,}{n,m}

正则表达式的常见用例

正则表达式在文本处理中有许多常见的用例,以下是一些示例:

  1. 验证邮箱地址:使用正则表达式验证输入的邮箱地址是否合法。

  2. 提取链接:从文本中提取所有链接的URL。

  3. 查找和替换:在文本中查找特定的模式并进行替换。

  4. 校验日期格式:检查日期字符串是否符合指定的日期格式。

  5. 数据清洗:清洗数据中的不规范字符或格式。

高级正则表达式技巧

正则表达式的应用非常广泛,以下是一些高级技巧和示例:

  1. 使用捕获分组:捕获分组可以将匹配的文本保存到变量中,然后进行进一步处理。

    var pattern = /(\d{2})-(\d{2})-(\d{4})/;
    var text = "30-09-2023";
    var result = pattern.exec(text);
    var day = result[1]; // 30
    var month = result[2]; // 09
    var year = result[3]; // 2023
    
  2. 零宽断言:零宽断言是一种高级技巧,用于匹配符合特定条件的文本,但不包括断言文本本身。

    // 匹配后面跟着 "world" 的 "hello"
    var pattern = /hello(?= world)/;
    var text = "hello world";
    var result = pattern.test(text); // true
    
  3. 非捕获分组:使用 ?: 语法来创建非捕获分组,匹配文本但不捕获到变量中。

    var pattern = /(?:Mr|Ms|Mrs) (\w+)/;
    var text = "Mr Smith";
    var result = pattern.exec(text);
    var name = result[1]; // Smith
    
  4. 反向引用:在正则表达式中可以使用反向引用,引用之前匹配的文本。

    var pattern = /(\w+) is \1/;
    var text = "apple is apple";
    var result = pattern.test(text); // true
    
  5. 嵌入修饰符:正则表达式可以嵌入修饰符,灵活地应用不同的匹配规则。

    var pattern = /hello/i; // 不区分大小写
    var text = "Hello";
    var result = pattern.test(text); // true
    

在 JavaScript 中使用正则表达式

在 JavaScript 中,正则表达式是内置的对象,可以使用正则表达式字面量或构造函数来创建正则表达式对象。例如:

var pattern = /hello/;
var pattern = new RegExp("hello");

然后,你可以使用正则表达式的方法来执行匹配操作,如test()exec()match()search()replace()

下面是一个示例,演示如何使用正则表达式验证邮箱地址:

var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
var email = "user@example.com";
if (emailPattern.test(email)) {console.log("Valid email address");
} else {console.log("Invalid email address");
}

这将输出 “Valid email address”,因为 email 符合邮箱地址的正则表达式模式。

总结

JavaScript 正则表达式是一种强大的文本匹配工具,它可以用于执行各种文本处理任务,包括验证、查找、替换和切割文本。在本篇博客中,我们深入探讨了正则表达式的基础知识、语法和常见用例,还介绍了一些高级技巧。

学会使用正则表达式可以极大地提高文本处理的效率,因此建议深入学习和实践正则表达式的用法,以便更好地处理文本数据。希望本文能帮助你更好地理解和使用 JavaScript 正则表达式。如果你有更多问题或需要进一步的帮助,请随时提问。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

Vue 绑定style和class

在应用界面中,某些元素的样式是动态的。class 与 style 绑定就是专门用来实现动态样式效果的技术。 如果需要动态绑定 class 或 style 样式,可以使用 v-bind 绑定。 绑定 class 样式【字符串写法】 适用于:类名不确定,需要动态指…

ETL数据转换方式有哪些

ETL数据转换方式有哪些 ETL(Extract, Transform, Load)是一种常用的数据处理方式,用于从源系统中提取数据,进行转换,并加载到目标系统中。 数据清洗(Data Cleaning)&am…

快手商品详情数据接口,快手商品详情API接口,快手API接口

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取快手网站上的商品页面。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是,快手网站…

android studio 移植工程

第一步: 第二步:创建 第三步: 第四步:复制文件至替代新工程中的文件 第五步:修改 第六步:编译OK

设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 一句话概括行为型模式 1.1、迭代器模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式:类或对象间如何交互、如何划分职责,从而更好的完成任务. 1.1、迭代器…

基于局部结构特征的图像匹配

目录 第一章 绪论........................................................................ 6 1.1 研究课题背景....................................................... 6 1.2 图像匹配技术国内外发展现状........................... 8 1.3 课题研究的目的......…

芯片学习记录SN74HC14DR

SN74HC14DR 芯片介绍 该设备包含六个独立的逆变器使用施密特触发器输入。每个门执行正逻辑中的布尔函数Y/A("/"表示“非”)。 引脚信息 引脚名称I/O电平功能11AI0~vcc输入21YO0~vcc输出7GND-电源14VCC-3.3v电源(2~6V)Y/A 推荐使用条件 参数…

微信浏览器大字体模式 按钮文字居中用line-height 显示异常

按钮文字居中用line-height 的css 在微信浏览器大字体模式,会导致显示错误。改成flex 居中就好了

Joe主题魔改:正文内容实现图片懒加载

引言 有个哥们问我Joe主题的正文部分,如何同样图片懒加载,于是便研究了一下。 探索过程 因为PHP语言我用的很少,并不擅长,于是我去网上搜了一下。 方案一:用一个叫Jquery Lazyload的JavaScript脚本,我尝…

Unity基础课程之物理引擎5-射线的使用方法总结

在实际游戏开发时,不可避免地要用到各种射线检测。即便是一个不怎么用到物理系统的游戏,也很可能要用到射线检测机制。换句话说,射线检测在现代游戏开发中应用得非常广泛,超越了物理游戏的范围。下面简单举几个例子。 &#xff0…

CSS网页标题图案和LOGO SEO优化

favicon图标 将网页的头名字旁边放入一个图案 想将想要的图案切成png图片 然后把png图片转换成ico图案可以借助进行访问 将语法引用到head里面 SEO译为搜索引擎优化。是一种利用搜索引擎的规则提高网站有关搜索引擎的自然排名的方式 SEO的目的是对网站进行深度的优化&…

Unity关键词语音识别

一、背景 最近使用unity开发语音交互内容的时候,遇到了这样的需求,就是需要使用语音关键字来唤醒应用程序,然后再和程序做交互,有点像智能音箱的意思。具体的技术方案方面,也找了一些第三方的服务,比如百度…

【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密

一、介绍 业务场景中经常会遇到诸如用户手机号,身份证号,银行卡号,邮箱,地址,密码等等信息,属于敏感信息,需要保存在数据库中。而很多公司会会要求对数据库中的此类数据进行加密存储。 敏感数据…

C语言达到什么水平才能从事单片机工作

C语言达到什么水平才能从事单片机工作 从事单片机工作需要具备一定的C语言编程水平。以下是几个关键要点:基本C语言知识: 掌握C语言的基本语法、数据类型、运算符、流控制语句和函数等基本概念。最近很多小伙伴找我,说想要一些C语言学习资料&…

下载Python的不同版本在同一台电脑上如何共存

1. 下载安装不同版本的Python 官网下载:https://www.python.org/downloads/安装自己需要的版本(我这里以Python3.6和Python3.9为例,下载安装细节不过多赘述) (这里的安装路径自己设定,命名最好是根据下载…

win10取消ie浏览器自动跳转edge浏览器

建议大家看完整篇文章再作操作 随着windows10 日渐更新,各种不同的操作,规避IE浏览器跳转Edge浏览器的问题 算了,找了台云机装的server 有自带的IE 1.(失败)思路 协助Edge浏览器 管理员身份打开 PowerShell 一般e…

Arcgis实现Tiff合并

Arcgis实现Tiff合并 现有四幅Tiff影像 打开数据管理工具 输入使用这四幅影像 下面这个就是建立数据库,这个不对 点击确定 合成完毕

网络安全就业形势怎么样?

泻药,以下都是我本人的肺腑之言,是答主深耕职场多年,转战数家公司总结周围朋友的从业经验才总结出来的行业真相,真心希望帮助到还没有步入职场的大家,尤其是24届的应届毕业生,多掌握些就业信息就能少走一些…

采用 guidance 提高大模型输出的可靠性和稳定性

本文首发于博客 LLM 应用开发实践 在复杂的 LLM 应用开发中,特别涉及流程编排和多次 LLM 调用时,每次的 Prompt 设计都取决于前一个步骤的大模型输出。如何避免大语言模型的"胡说八道",以提高大语言模型输出的可靠性和稳定性&#…

时序数据库InfluxDB了解

参考:https://blog.csdn.net/u014265785/article/details/126951221