探索正则表达式的神奇魅力

正则表达式

正则表达式,如同一位技艺精湛的艺术家,能够以极致的精准和优雅,雕刻出你想要的文本形态。它的魅力在于其简练而灵活的语法,让你得以轻松地在庞杂的文字丛林中捕捉目标。

无论是验证数据格式的合法性、从复杂文本中提取关键信息,抑或是进行批量替换操作,正则表达式都能为你实现心中所想。它不受语言或平台的限制,几乎涵盖了所有主流的编程语言和文本编辑器,因此成为了文本处理领域的无可替代之选。

尽管学习曲线可能稍显陡峭,但一旦掌握,正则表达式将成为你的得力助手,为你带来高效、精确的文本处理体验。它让你能够以巧妙的方式应对各种文本处理挑战,将混沌的文本数据塑造成你想要的形态,展现出处理文本的艺术之美。

创建方式:

  1. 字面量:
    1. 使用斜杠(/)包围创建正则
    2. 例:/abc/
    3. 优点:性能好,当正则保持不变时
  2. 构造函数:
    1. 调用RegExp对象的构造函数
    2. 例:new RegExp("abc")
    3. 优点:可以动态的定义,比如根据用户输入的不同的信息,创建指定的正则

正则规则:

  1. /abc/:匹配字符串中包含abc

  2. /ab*c/:*表示前一项出现零次或者多次,可以是字符串 abbbbc 或者 abc 或者 ac

  3. 断言:

    1. 边界类断言:

      1. ^:匹配开头

      2. $:匹配结束

      3. [\b]:匹配一个退格(U+0008)。(和\b不同)

      4. \b:匹配边界:

        比如:/\bw/ 在 "want" 中匹配到 w,并且 w 只能在边
        比如:/t\b/ 在 "want" 中匹配到 t,并且 t 只能在边
        
      5. \B:匹配边界

        比如:/w\B/ 在 "want" 中匹配到 w,并且 w 只能在前边
        比如:/\Bt/ 在 "want" 中匹配到 t,并且 t 只能在后边
        
    2. 其他断言:

      1. x(?=y)先行断言x 后面跟随着 y 时匹配结果为 x

        例如:/\d(?=\.)/.exec(55.47) 匹配 55
        
      2. x(x?!y)先行否定断言: x 后面没有跟随 y 时匹配结果为 x

        例如:/\d+(?!\.)/.exec(55.47) 匹配 47
        
      3. (?<=y)x后行断言: x 前面跟随着 y时匹配结果为 x

        例如:/(?<=\.)\d+/.exec(55.47) 匹配 47
        
      4. (?<!y)x后行否定断言: x 前面没有跟随着 y 时匹配结果为 x

        例如:/(?<!\.)\d+/.exec(55.47) 匹配 55
        
  4. 字符类:

    1. [xyz] | [a-c]:匹配方括号中的任何字符,如果连字符可以使用-连接,比如[abcd] === [a-d]

    2. [^xyz] | [^a-c]:匹配除方括号中字符的任何字符,例:[^abc]匹配"bcaqh"中的q(^也可以表示输入的开始)

    3. .:匹配除行终止符之外的任何单个字符:\n\r\u2028\u2029

      例如:/.y/ 在"yes make my day"中匹配 my 和 ay,而不是 yes
      
    4. \d:等同于[0-9],匹配任何数字, `/\d/ === /[0-9]/

    5. \D:等同于[^0-9],匹配任何非数字的字符

    6. \w:等同于[A-Za-z0-9_],匹配基本拉丁字母中的任何字母数字字符

    7. \W:等同于[^A-Za-z0-9_],匹配除基本拉丁字母中的任何字母数字字符的字符,例:%,&

    8. \s:匹配单个空白字符。\f \n \r \t \v ……,例:/\s\w*/匹配"say hi"中的"hi"

    9. \S,匹配一个非空白字符

    10. \t:水平制表符

    11. \r:回车符

    12. \n:换行符

    13. \v:垂直制表符

    14. \f:换页符

    15. \:转义后面的字符

      比如匹配 *,需要在 * 前加 \ => /\a\*/ 匹配到 "a*"
      比如匹配 \,需要/\\/,使用前一个 \ 转义后一个 \ 来匹配后一个 \
      
    16. a|b:匹配ab,管道符(|)分隔部分表示可选项,[ab]也可以匹配方括号内任何字符

  5. 量词:

    1. x* | x{0,}:表示前一项 x 出现 0 次或者多次
    2. x+ | x{1,}:表示前一项 x 出现 1 次或者多次
    3. x? | x{0,1}:表示前一项 x 出现 0 次或者 1 次
    4. x{n}:表示前一项 x 匹配 n
    5. x{n,}:表示前一项 x 至少匹配 n 次,至多不限
    6. x{n,m}:表示前一项 x 至少匹配 n 次,至多匹配 m
  6. 标志:

    1. g:全局搜索:不止搜索出第一个符合条件的项,会将所有符合条件的都搜索到
    2. i:不区分大小写
    3. m:多行搜索
    4. s:允许.匹配换行符
    5. u:使用unicode码的模式进行匹配
    6. y:执行”粘性(sticky)搜索,匹配从目标字符串的当前位置开始“
    7. 例如:不区分大小写
      1. 字面量:/d*/i
      2. 构造函数:new RegExp("d*", "i")

正则方法:

使用范围:

  1. RegExp
    1. exec:一个在字符串中执行查找匹配的 RegExp 方法,它返回一个数组(未匹配到则返回 null
    2. test:一个在字符串中测试是否匹配的 RegExp 方法,它返回 truefalse
  2. String
    1. match:一个在字符串中执行查找匹配的 String 方法,它返回一个数组,在未匹配到时会返回 null
    2. matchAll:一个在字符串中执行查找所有匹配的 String 方法,它返回一个迭代器(iterator
    3. replace:一个在字符串中执行查找匹配的 String 方法,并且使用替换字符串替换掉匹配到的子字符串。
    4. search:一个在字符串中测试匹配的 String 方法,它返回匹配到的位置索引,或者在失败时返回 -1
    5. split:一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的 String 方法

混淆点:

  1. /a\+b/ === new RegExp("a\\+b")

    因为在字符串中,一个\代表转义字符,所以在字符串中:

    1. 使用"a\+b"的话,其实就是将普通的*进行了转义,所以new RegExp("a\+b") === /a+b/
    2. 使用"a\\+b"的话,就是将普通的+转义为特殊字符后,再转义为普通字符,所以new RegExp("a\\+b") === /a\+b/
  2. new RegExp("a\+b") === new RegExp("a+b") === /a+b/

    因为在JavaScript字符串中,反斜线\作为转义字符,所以在字符串中使用反斜杠会影响字符串的解释,例如:\n换行符,\t制表符等

    1. 使用"a\+b"的话,\+会被解释为一个普通的+
    2. 使用"a+b",输出同样是"a+b"
    console.log("a\+b") // 输出:a+b
    console.log("a+b")  // 输出:a+b
    

    所以实际上输出都是a+b。因此,将这样的字符串传递给 new RegExp() 构造函数时,都会生成 /a+b/ 的正则。

在文字的编织中,正则表达式是你的神奇魔杖。让我们一起握紧这把魔杖,探索文本世界的奥秘,创造出更美好的故事!

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

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

相关文章

AWS概述

AWS概述EMR Serverless Aamzon Web Services提供了一系列全球范围的云产品&#xff0c;包括计算、存储、数据库、分析、网络、移动、开发工具、管理工具、IoT、安全和企业应用&#xff1a;按需交付、及时可用、采用随用随付的定价模式。你可以畅享200多种服务&#xff0c;从数据…

乡村振兴的乡村基础设施建设:完善基础设施,提升乡村生活品质,打造宜居宜业的美丽乡村

摘要&#xff1a;乡村振兴是新时代中国特色社会主义“三农”工作的重要内容&#xff0c;而乡村基础设施建设作为乡村振兴的基石&#xff0c;对于提升乡村生活品质、打造宜居宜业的美丽乡村具有至关重要的意义。本文从乡村基础设施建设的必要性出发&#xff0c;分析了当前乡村基…

用GAN网络生成彩票号码

本文将详细解析如何使用生成对抗网络(GAN)来生成彩票号码。我们将介绍代码的每个部分,并给出详细注释,帮助读者理解整个过程。效果如下: 导入依赖 首先,我们需要导入所需的库。 import numpy as np import pandas as pd import torch import torch.nn as nn import t…

区分POJO、DTO、DO、VO、BO、PO、Entity

简述&#xff1a; VO 用于后端向前端传输数据&#xff1b; DTO用于前端向后端传输数据&#xff1b; BO用于微服务之间传输数据&#xff1b; PO等同于Entity&#xff0c;DO是Entity的一种&#xff0c;三者用于表示数据库的一条记录&#xff0c;通常用Entity。 &#xff08;…

14年后 苹果终于推出iPad原生计算器应用

迄今为止&#xff0c;在WWDC 2024大会上&#xff0c;新增的计算器应用获得了最热烈的掌声。iOS 官方计算器应用程序终于要登陆大屏幕了。该功能利用额外的屏幕空间带来了公司无法在 iPhone 上实现的新功能。其中最大的亮点是新增了"数学笔记"功能。新增的功能可以帮你…

酶酵母展示技术简介

酵母展示技术&#xff08;Yeast Display Technology&#xff09;是指将酶序列/酶突变文库序列与凝集素Aga2p融合表达&#xff0c;Aga2p蛋白亚基通过两个二硫键与固定在酵母细胞壁上的Aga1p 蛋白亚基结合&#xff08;即载体蛋白将蛋白酶&#xff08;带有特定标签&#xff09;以活…

黑豹程序员 堆和栈

简单变量及作用域 main()   int x1; show ()   int x2 执行步骤&#xff1a; 第1步&#xff1a;main()函数是程序入口&#xff0c;JVM先执行&#xff0c;在栈内存中开辟一个空间&#xff0c;存放int类型变量x&#xff0c;同时附值1。 第2步&#xff1a;JVM执行show()函…

c++/c中野指针和悬空指针的示例

目录 一、野指针的概念 二、野指针示例 三、悬空指针的概念 四、悬空指针示例 1.指针释放后未置空 2.返回栈内存地址的指针 一、野指针的概念 野指针是指尚未初始化的指针&#xff0c;它指向的地址是未知的、不确定的、随机的。这种指针在使用时可能导致程序崩溃、数据损…

Kafka性能优化策略综述:提升吞吐量与可靠性

Kafka性能优化策略综述&#xff1a;提升吞吐量与可靠性 优化 Kafka 的性能可以从多个方面入手&#xff0c;包括配置调优、架构设计和硬件资源优化。下面详细介绍一些常用的优化策略&#xff1a; 1. 分区设计 增加分区数量&#xff1a;更多的分区意味着更高的并行处理能力&am…

ZDH-智能营销-标签模块

目录 主题 项目源码 预览地址 安装包下载地址 标签模块 什么是标签 标签场景分类 标签设计 标签按照场景做了分类&#xff0c;但是运营人员需要感知到吗 标签按照场景做了分类&#xff0c;底层的计算引擎是否需要划分&#xff1f; 标签模块&#xff0c;是否需要涉及…

openresty安装并使用lua进行业务逻辑处理

OpenResty 基础教程及Lua动态脚本实现 OpenResty 简介 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;它将 Nginx 的 C 模块和 Lua 脚本相结合&#xff0c;提供了一个强大的 Web 应用服务器和反向代理服务器。OpenResty 特别适合处理高并发的 Web 应用&am…

爽快,通透,自洽

那些消耗你的人和事&#xff0c;多看一眼都是你的不对。不必过度为他人提供情绪价值&#xff0c;可以理解别人的处境&#xff0c;但边界感很重要。让别人开心不是你的责任。控制情绪不是让我们在生活中隐藏情绪&#xff0c;而是允许自己有情绪&#xff0c;并做自己情绪的主人。…

最新thinkphp5内核全开源女神赢口红H5公众号版第五版(100%可经营)

最新thinkphp5内核全开源女神赢口红H5公众号版第五版&#xff08;100%可经营&#xff09; 搭建教程 1、程序为thinkPHP5开发 php版本要求5.6&#xff01;不支持虚拟主机&#xff01; 2、上传程序到您的根目录&#xff01;导入m213.sql文件&#xff01;修改数据库配置文件app…

WordPress模板推荐

WordPress外贸主题 wordpress跨境电商独立站主题&#xff0c;wordpress外贸建站模板。 手机配件wordpress外贸网站模板 充电器、移动电源、手机膜、手机电池、手机壳、手机转接头等手机配件wordpress外贸网站模板。 毛巾WordPress外贸主题 毛巾、面巾、婴童毛巾、浴巾、方巾、…

【深度学习】【NLP】Bert理论,代码

论文 &#xff1a; https://arxiv.org/abs/1810.04805 文章目录 一、Bert理论BERT 模型公式1. 输入表示 (Input Representation)2. 自注意力机制 (Self-Attention Mechanism)3. Transformer 层 (Transformer Layer) 二、便于理解Bert的代码1. 自注意力机制2. Transformer 层3. …

2024 AEE | 风丘科技将亮相日本爱知国际会展中心——共同创造!

2024年名古屋汽车工程博览会&#xff08;Automotive Engineering Exposition 2024 NAGOYA&#xff09;将于7月17-19日在日本爱知县国际展示场&#xff08;Aichi Sky Expo&#xff09;开展。本展会是专门为活跃在汽车行业的工程师和研究人员举办的汽车技术展览&#xff0c;汇聚了…

Python办公MySQL(一):安装MySQL以及Navicat可视化工具(附送Navicat到期解决方法)

目录 专栏导读1、下载 MySQL Community Server2、安装3、安装Navicat4、连接刚刚安装的MySQL5、创建一个数据库方法1方法2 6、创建一张表方法1&#xff1a;准备一个test文件方法2&#xff1a; Navicat到期解决总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Pytho…

干货 | 2024元宇宙技术融合与新质生产力的创新实践(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff…

Craig Federighi 和 John Giannandrea 在 WWDC 上谈论苹果智能技术

WWDC 主题演讲结束后&#xff0c;苹果公司的克雷格-费德里吉&#xff08;Craig Federighi&#xff09;和约翰-吉安南德雷亚&#xff08;John Giannandrea&#xff09;坐下来&#xff0c;更深入地讨论了苹果智能公司在人工智能方面所做的努力&#xff0c;包括该公司是如何训练模…

三高系统的架构设计方案:高并发、高可用、高性能

文章目录 一、互联网系统三高概述1、互联网的三高2、高并发3、高可用4、高性能 二、高并发、高性能技术解决方案1、多高的并发才算高并发&#xff1f;2、水平扩展3、负载均衡思想4、缓存思想5、池化复用思想6、异步思想7、预处理-惰性更新思想8、分而治之思想 三、高可用技术解…