正则表达式:掌握文本处理的秘密武器

当我们处理文本数据时,正则表达式是一种强大的工具,可以帮助我们快速、准确地找到所需的信息。通过匹配和筛选文本模式,正则表达式可以简化文本处理任务,提高工作效率。本文将带你走进正则表达式的世界,探讨它的工作原理、应用案例以及注意事项。

正则表达式的作用

  • 匹配:可以用来匹配字符串中的特定模式,即查找字符串中符合某种规则的内容。
  • 替换:可以用来替换字符串中符合某种规则的内容,将其替换为指定的内容。
  • 验证:可以用来验证字符串是否符合某种规则,如邮箱、电话号码、身份证号等格式的验证。
  • 提取:可以用来从文本中提取特定的信息,如提取网页中的链接、提取邮件中的附件等。

通过正则表达式,我们可以轻松地匹配、搜索、替换和验证文本数据。正则表达式虽然看起来复杂,但其实它是一种非常有用的工具,特别是对于文本处理任务。

正则表达式的构成

以下是一个正则表达式特殊字符及其所代表含义的表格:

特殊字符含义
.匹配除了换行符之外的任意字符
\n匹配换行符(换行符是一个特殊的字符,不占用空格)
\s匹配任何空白字符,包括空格、制表符、换页符等
\S匹配任何非空白字符
\d匹配任何数字字符,等价于 [0-9]
\D匹配任何非数字字符,等价于 [^0-9]
\w匹配任何字母、数字或下划线字符,等价于 [A-Za-z0-9_]
\W匹配任何非字母、数字或下划线字符,等价于 [^A-Za-z0-9_]
[]用于定义字符集,匹配方括号内的任意一个字符
[^]用于定义非字符集,匹配除了方括号内字符之外的任意字符
*匹配前面的字符或模式出现零次或多次
+匹配前面的字符或模式出现一次或多次
?匹配前面的字符或模式出现零次或一次
{n}精确匹配前面的字符或模式出现n次
{n,}匹配前面的字符或模式出现至少n次,但不超过正则表达式的尾部
{n,m}匹配前面的字符或模式出现n到m次,其中n和m都是正整数,且n <= m。如果n和m的值相同,则与{n}的效果相同。如果n的值大于m的值,则与{m,}的效果相同。如果n和m的值不同,则与{n,m}的效果相同。例如,[a-z]{2,4} 可以匹配 "a"、"ab"、"abc"、"abcd",但不能匹配 "abcde" 或 "j" 等字符。
\0 to \7可以表示八进制编码中的任意一个数字,其中 \0 表示八进制数中的零,\1 到 \7 表示八进制数中的其他数字。例如,\255 表示八进制数中的 FF。但是,在正则表达式中,只有 \0 可以直接使用,其他数字需要用反斜杠进行转义。例如,如果要匹配文本中的 "FF",可以使用正则表达式 \xFF。
\xXX 或 \x{XX} 或 \uXXXX 或 \u{XXXX} 或 \UXXXXXXXX 或 \U{XXXXXXXX}可以表示 Unicode 编码中的任意一个字符。其中 \xXX 表示使用十六进制编码表示的字符,\x{XX} 表示使用十六进制编码表示的字符(允许使用大写的 X),\uXXXX 表示使用四位十六进制编码表示的 Unicode 字符(允许使用大写的 X),\u{XXXX} 表示使用四位十六进制编码表示的 Unicode 字符(允许使用大写的 X 和小写的 u),\UXXXXXXXX 表示使用八位十六进制编码表示的 Unicode 字符(允许使用大写的 U),\U{XXXXXXXX} 表示使用八位十六进制编码表示的 Unicode 字符(允许使用大写的 U 和小写的 u)。例如,如果要匹配文本中的 "你",可以使用正则表达式 \u4F60。如果要匹配文本中的 "你",可以使用正则表达式 \U0004F60。注意,在正则表达式中,所有的反斜杠都需要用双反斜杠进行转义。例如,如果要匹配文本中的 "",可以使用正则表达式 ""。

应用案例

正则表达式在日常生活中的使用非常广泛,例如在文本搜索、数据筛选、日志分析等领域。以下是一些常见的应用案例:

1. 邮箱验证
 
const emailRegex =/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
console.log(emailRegex.test("example@example.com")) // true
console.log(emailRegex.test("example@example..com")) // false

2. 手机号验证
 
// 只要是13 - 19开头即可的手机号
const phoneRegex = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/console.log(phoneRegex.test("+8613456789098")) // true
console.log(phoneRegex.test("13456789098")) // true
console.log(phoneRegex.test("12345678909")) // false

3. 时间格式验证
 
// 24小时制(HH:mm:ss)
const timeRegex = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
console.log(timeRegex.test("23:59:59")) // true
console.log(timeRegex.test("24:00:00")) // false
console.log(timeRegex.test("00:00:00")) // true

4. 格式化金额数字
 
// 每3位添加逗号
const pattern = /(\d)(?=(\d{3})+(?!\d))/g
console.log("1234567.89".replace(pattern, "$1,")) // 1,234,567.89
console.log("123456789.89".replace(pattern, "$1,")) // 123,456,789.89

注意事项

在使用正则表达式时,需要注意以下几点:

  • 考虑选择的顺序。要将比较常用的选择项放在前面,这样它们可以较快被匹配。
  • 提取共用模式。例如将“(abcd|abef)”替换为“ab(cd|ef)”。
  • 使用字符组代替分支(替换)条件。例如用[a-d]代替a|b|c|d,避免不必要的回溯。
  • 不要滥用字符组(单个字符时不要用字符组)。
  • 使用锚点^、$、\b加速定位。
  • 从两次中提取必须元素,a{2,4}写成aa{0,2}。
  • 不要贪婪,在*、+、{m,n}后面加上问号,就会变成非贪婪模式。
  • 减少分组与嵌套。如果并不需要获取一个分组内的文本,就使用非捕获分组。
  • 禁止编写包含具有自我重复的重复性分组和包含替换的重复性分组。

总结

正则表达式在前端开发中是一种非常有用的工具,可以帮助我们处理和操作字符串。通过熟练掌握正则表达式的语法和应用场景,可以提高开发效率并实现更加灵活和精确的字符串处理操作。

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

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

相关文章

汇编-变量

.386 .model flat,stdcall option casemap:none.data sum DWORD 0 ;创建一个全局变量&#xff0c;取名sum,初始化0 sum1 DWORD ? ;创建一个全局变量sum1,无初始化 ;问号(?)初始化值使得变量未被初始化&#xff0c;这意味着在运行时才会为该变量分配一个值 ;变量名…

【Node.js入门】1.3 开始开发Node.js应用程序

1.3 开始开发Node.js应用程序 学习目标 &#xff08;1&#xff09;熟悉开发工具Visual Studio Code的基本使用&#xff1b; &#xff08;2&#xff09;掌握Node.js应用程序的编写、运行和调试的基本方法。 构建第一个 Node.js应用程序 代码 const http require("htt…

【小技巧】WPS统计纯汉字(不计标点符号)

【小技巧】WPS统计纯汉字&#xff08;不计标点符号&#xff09; 首先&#xff0c;CtrlF打开查找页面&#xff1a; 选择“高级搜索”&#xff0c;然后勾选“使用通配符”&#xff0c;然后在“查找内容”后面输入&#xff1a;[一-﨩]。注意&#xff1a;一定要带“[]”和“-”且…

算法leetcode|87. 扰乱字符串(rust重拳出击)

文章目录 87. 扰乱字符串&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 87. 扰乱字符串&#xff1a; 使用下面描述…

web前端——HTML+CSS实现九宫格

web前端——HTMLCSS实现九宫格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

C 和 C++ 可变参数介绍

文章目录 前言概念C 的可变参数参数列表 #va_list 4组宏 C 的可变参数参数列表 #va_list 4组宏初始化列表 initializer_list<> 类模板可变参数模板 总结参考资料作者的话 前言 C 和 C 可变参数介绍。 概念 可变&#xff08;长&#xff09;/不定&#xff08;长&#xff…

10道高频Vuex面试题快问快答

※其他的快问快答&#xff0c;看这里&#xff01; 10道高频Qiankun微前端面试题快问快答 10道高频webpack面试题快问快答 20道高频CSS面试题快问快答 20道高频JavaScript面试题快问快答 30道高频Vue面试题快问快答 面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过…

NOIP2023模拟14联测35 charlotte

题目大意 给你一棵有 n n n个节点的树&#xff0c;并用 01 01 01串告诉你哪些节点上有棋子&#xff08;恰好一棵&#xff09;。 你可以进行若干次操作&#xff0c;每次操作可以将两颗距离至少为 2 2 2的棋子向彼此移动一步。 问能否通过若干次操作使得所有的棋子都在一个点上…

07 # 手写 find 方法

find 的使用 find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 9];var result arr.find(fun…

【Edge】微软Edge每次启动自动导入Chrome收藏夹,无法取消“每次启动浏览器时导入浏览数据”功能的解决方法(202311)

写在前面 Edge现在也不管用户体验了吗? 这个BUG都快一个月了&#xff0c;还没见修复&#xff0c;从118.0.2088开始&#xff0c;我是在2023年10月份一次更新后发现的这个BUG&#xff0c;结果社区论坛什么信息都没有&#xff0c;英文也没收到。 Edge的BUG现象 不知道哪次Edge…

Chatgpt人工智能对话源码系统分享 带完整搭建教程

ChatGPT的开发基于大规模预训练模型技术。预训练模型是一种在大量文本数据上进行训练的模型&#xff0c;可以学习到各种语言模式和知识。在ChatGPT中&#xff0c;预训练模型被用于学习如何生成文本&#xff0c;并且可以用于各种不同的任务&#xff0c;如对话生成、问答、摘要等…

SpringBoot整合Kafka (二)

&#x1f4d1;前言 本文主要讲了SpringBoot整合Kafka文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ 上文链接&#xff1a;SpringBoot整合Kafka (一) &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页…

IDEA 函数下边出现红色的波浪线,提示报错

Inferred annotations: Method makeOkResult: org.jetbrains.annotations.Contract("_, _, _, _ -> new") org.jetbrains.annotations.NotNull Parameter headers: org.jetbrains.annotations.NotNull 出现这个提示&#xff0c;我应该怎么处理这个函数&#xff1…

Lua中如何使用continue,goto continue(模拟C++ C#的continue)

Lua中模拟goto continue(模拟C C#的continue 介绍具体方法goto continuewhile模拟continue方法 总结 介绍 在C#或者C里面应该都见过continue&#xff0c;他的用法其实就是打断当前循环直接直接进入下次循环的&#xff0c;代码如下&#xff1a; for (int i 0; i < 10; i){i…

Angular项目升级最佳实践

1、查看第三方依赖库各版本的重大变化&#xff0c;确定待升级的Angular版本以及第三方库的版本。 2、在SourceTree中新建一个源码分支&#xff0c;用作项目升级。 3、安装新版node.js 4、打开https://update.angular.io/?v10.0-16.0&#xff0c;选择angular新旧版本&#x…

改进YOLOv5:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络

🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…

查看apk签名

cmd 命令&#xff1a; keytool -v -list -keystore "E:\xxx\release.jks"

kubernetes集群编排——k8s存储(configmap,secrets)

configmap 字面值创建 kubectl create configmap my-config --from-literalkey1config1 --from-literalkey2config2kubectl get cmkubectl describe cm my-config 通过文件创建 kubectl create configmap my-config-2 --from-file/etc/resolv.confkubectl describe cm my-confi…

深入剖析React Hooks中的 useCallback

前言 自 React 16.8 版本引入 Hooks 以来&#xff0c;useCallback 成为了前端开发者们越来越青睐的一个功能。useCallback 可以有效优化组件性能&#xff0c;尤其在处理函数式组件中的状态更新时。本文将详细介绍 useCallback 的用法及其注意事项。 1. useCallback 简介 use…

Unreal UnLua + Lua Protobuf

Unreal UnLua Lua Protobuf https://protobuf.dev/ protobuf wire format&#xff1a;pb 编译到底层的数据协议 https://github.com/starwing/lua-protobuf/blob/master/README.zh.md buffer 处理 lua string 可以当 buffer 用&#xff0c;# len 不会遇到 0 截断&#xf…