JS正则02——js正则表达式中常用的方法、常见修饰符的使用详解以及各种方法使用情况示例

JS正则02——js正则表达式中常用的方法、常见修饰符的使用详解以及各种方法使用情况示例

  • 1. 前言
    • 1.1 简介
    • 1.2 js正则特殊字符即使用示例
  • 2. 创建正则表达式的方式
    • 2.1 两种创建正则表达式的方式
    • 2.2 关于修饰符
  • 3. 正则表达式中常用的方法
    • 3.1 test() 方法——正则表达式对象的方法
    • 3.2 search()方法——字符串对象的方法
    • 3.3 replace()方法——字符串对象的方法
      • 3.3.1 语法
      • 3.3.2 例子
        • 3.3.2.1 不使用正则例子
        • 3.3.2.2 使用正则例子
    • 3.4 split()方法——字符串对象的方法
      • 3.4.1 语法
      • 3.4.2 例子
    • 3.5 match()方法——字符串对象的方法
      • 3.5.1 关于match()方法
      • 3.5.2 match()的例子
    • 3.6 exec()方法——正则表达式对象的方法
  • 4. 关于特定字符`()`——分组 + 捕获
    • 4.1 描述
    • 4.2 示例
  • 5. 总结关于常见修饰符的使用
  • 6. 参考

1. 前言

1.1 简介

  • JavaScript正则表达式是一种强大的工具,用于在字符串中匹配和操作文本。它可以用来验证输入的格式、提取特定的文本、替换文本等。

1.2 js正则特殊字符即使用示例

  • 可以看上篇文章,如下
    JS正则01——JS正则表达式中各元字符的详细介绍以及常用的js正则示例.

2. 创建正则表达式的方式

2.1 两种创建正则表达式的方式

  • 使用字面量创建:

    • 语法如下:
      var regex = /pattern/modifiers;   // 修饰符 modifiers 可以省略
      
    • 举例如下:
      var regex = /hello/;   // 匹配包含"hello"的字符串
      
      var regex_2 = /^hello$/;   //严格匹配,只能匹配"hello"字符串
      
      var regex_3 = /^hello$/i;  //只能匹配"hello"字符串,但不区分大小写匹配
      
  • 使用构造函数创建:

    • 语法如下:
      var regex = new RegExp("pattern");var regex = new RegExp("pattern","modifiers");
      
    • 举例如下:
      var value = "hEllo";
      
      var regex = new RegExp("hello");   // 匹配包含"hello"的字符串
      var regex_2 = new RegExp("^hello$");   // 严格匹配,只能匹配"hello"字符串
      var regex_3 = new RegExp("^hello$","i");  //只能匹配"hello"字符串,但不区分大小写匹配
      
      alert( regex.test(value) ); // true-匹配成功   false-匹配失败
      

2.2 关于修饰符

  • 常用的JavaScript正则表达式修饰符如下:
    • i不区分大小写(在匹配时忽略大小写)。
    • g全局匹配(查找所有匹配项,而不仅仅是第一个)。
    • m多行匹配,将开始和结束字符(^和$)视为多行的开始和结束,而不仅仅是整个字符串的开始和结束。
    • s单行匹配,使点(.)元字符匹配包括换行符在内的任何字符。
    • u:Unicode匹配(启用完整的Unicode匹配模式,将模式视为由Unicode代码点组成的序列)。
    • y:粘性匹配(只从目标字符串的当前位置开始匹配)。
  • 关于使用例子,下面我们会介绍,请继续……

3. 正则表达式中常用的方法

3.1 test() 方法——正则表达式对象的方法

  • test()
    • 用于检测字符串是否匹配正则表达式。返回值为布尔值,如果匹配成功则返回true,否则返回false
    • 如果只需判断字符串是否匹配正则表达式,可以使用该test()方法。
  • 上面《2.1 两种创建正则表达式的方式》中以及上篇文章都是用 test() 方法说的示例,所以此处不再介绍。

3.2 search()方法——字符串对象的方法

  • search()
    用于在字符串中查找与正则表达式匹配的第一个位置。返回匹配到的位置索引。如果没有匹配到,则返回 -1
  • 例子:
    var value = "abc-hello-123";
    var regex = /hello/; 
    
    alert( value.search(regex) ); // 返回4 (注意:search() 是字符串的方法,并且字符串的index从0开始)
    
    var value = "abc-hello-123";
    var regex = /^hello$/; 
    
    alert( value.search(regex) ); // 返回-1(因为同时使用 ^和$ 时是严格匹配)
    

3.3 replace()方法——字符串对象的方法

3.3.1 语法

  • replace():
    • JavaScript中的正则表达式replace()方法用于在字符串中替换匹配的文本。
    • 语法:
      string.replace(regexp|substr, newSubstr|function)
      
      • regexp|substr:可以是一个正则表达式或者一个要被替换的子字符串。
      • newSubstr|function:可以是一个新的字符串或者一个用于替换的函数。
      • 如果第一个参数是一个正则表达式,replace()方法将会替换所有匹配的文本。如果第一个参数是一个字符串,replace()方法只会替换第一个匹配的文本

3.3.2 例子

3.3.2.1 不使用正则例子
  • 如下:
    var value = "abc-hello-123-hello-567";
    
    alert( value.replace("hello","good") ); // 返回 abc-good-123-hello-567(非正则表达式时:只替换第一个匹配的文本)
    
3.3.2.2 使用正则例子
  • 例子1——第二个参数是新字符串:
    var value = "abc-hello-123-hello-567";
    var regex = /hello/; 
    
    alert( value.replace(regex,"good") ); // 返回 abc-good-123-hello-567(只替换第一个hello)
    
    var value = "abc-hello-123-hello-567";
    var regex = /hello/g; 
    
    alert( value.replace(regex,"good") ); // 返回 abc-good-123-good-567(使用 g 可以全局替换,不只是替换第一个)
    
  • 例子2——第二个参数是函数:
    var value = "abc-hello-123";
    var regex = /hello/; 
    
    var newValue = value.replace(regex, function(str) {
        return str.toUpperCase();
    });
    
    alert(newValue);  // 返回:abc-HELLO-123
    

3.4 split()方法——字符串对象的方法

3.4.1 语法

  • JavaScript中的正则表达式split()方法用于将字符串分割成数组,根据指定的正则表达式模式进行分割。
  • 语法:
    str.split(regexp|separators)
    

3.4.2 例子

  • 例子1——使用一般分隔符分割,不使用正则表达式
    var value = "apple;banana;orange";
    
    console.log(value.split(";"));  //输出: ['apple', 'banana', 'orange']
    
  • 例子2——使用正则表达式
    var value = "I-123-love-456-you";
    
    var regex = /[-]\d+[-]/; 
    
    console.log(value.split(regex));  //输出: ['I', 'love', 'you']
    

3.5 match()方法——字符串对象的方法

3.5.1 关于match()方法

  • 关于match()方法
    • 通过调用该方法可以在字符串中查找匹配的内容。
    • 如果 regexp 没有标记 g,那么它会以数组形式返回第一个匹配结果,数组中包含捕获组和属性 index(匹配位置)、input(输入字符串,等于 str):。
    • 如果正则表达式具有全局标志(g)match()方法将返回一个数组,包含所有匹配到的内容
    • 如果没有找到匹配项,则返回null。
  • 语法:
    str.match(regexp)
    

3.5.2 match()的例子

  • 例子1——:不使用全局匹配(g)
    var value = "abc-hello-123-hello-567";
    
    var regex = /hello/;
    
    var result = value.match(regex);  // 匹配结果
    
    var match = result[0]; // 匹配到的字符串
    var index = result.index; // 匹配到的字符串在原始字符串中的索引位置(第一个位置)
    
    console.log(result); // 输出匹配到的字符和其他信息
    console.log(result=="hello"); // 输出true
    console.log(match);  // 输出 hello
    console.log(index);  // 输出 4
    
    在这里插入图片描述
  • 例子2——:使用全局匹配(g)
    var value = "abc-hello-123-hello-567";
    
    var regex = /hello/g;  // 使用 g 可以全局替换,不只是替换第一个
    
    var result = value.match(regex);  // 匹配结果
    
    console.log(result); // 输出匹配结果数组:['hello', 'hello']
    
    在这里插入图片描述

3.6 exec()方法——正则表达式对象的方法

  • 关于exec()方法
    • exec()是 JavaScript 正则表达式对象的一个方法,用于在字符串中执行匹配操作。
    • exec()方法返回一个数组,包含匹配到的内容以及其他相关信息,如果没有找到匹配项,则返回null
    • exec()方法好像不支持全局匹配,只能匹配第一个,设置了 g 不生效!
  • 例子:
    var value = "abc-hello-123-hello-567";
    
    var regex = /hello/;
    
    var result = regex.exec(value);  // 匹配结果
    
    var match = result[0]; // 匹配到的字符串
    var index = result.index; // 匹配到的字符串在原始字符串中的索引位置
    
    console.log(result);
    console.log(match);  // 输出 hello
    console.log(index);  // 输出 4
    
    在这里插入图片描述

4. 关于特定字符()——分组 + 捕获

4.1 描述

  • ()括号在正则表达式中有特殊的含义,用于分组捕获匹配的内容
    • 分组
      ()可以将多个字符组合成一个单元,形成一个子表达式。例如,/(ab)+/可以匹配连续出现的"ab"字符串,如"abab"、"ababab"等。
    • 捕获
      ()还可以用于捕获匹配的内容,以便后续使用。捕获的内容可以通过$1、$2等变量进行引用。例如,/(\d{4})-(\d{2})-(\d{2})/ 可以匹配日期格式,同时将 年、月、日分别捕获到 $1、$2、$3 中。

4.2 示例

  • 分组示例:
    • /(abc)+/:匹配连续出现的"abc"字符串,如"abcabc"、"abcabcabc"等
    • 更多示例也可以看上篇文章的例子,好多用到了分组:
      JS正则01——JS正则表达式中各元字符的详细介绍以及常用的js正则示例.
  • 捕获示例:
    • 示例1:匹配日期格式,如"2022-12-29",并将年、月、日分别捕获到$1、$2、$3中
      let str_0 = "2022-12-29";
      
      var regex_0 = /(\d{4})-(\d{2})-(\d{2})/;
      
      let result_0 = str_0.match(regex_0); //匹配结果
      
      console.log(result_0);
      
      console.log(result_0[0]); // 输出 2022-01-01(匹配到的字符串)
      
      console.log(result_0[1]); // 输出 2022(捕获到的)
      console.log(result_0[2]); // 输出 12(捕获到的)
      console.log(result_0[3]); // 输出 29(捕获到的)
      
      在这里插入图片描述
    • 示例2:
      let str = "I love JavaScript";
      
      // var regex = /JavaScript/;
      var regex = /Java(Script)/;
      let result = str.match(regex);
      
      console.log(result); 
      
      console.log( result[0] );     // 输出 匹配结果:JavaScript (full match)
      console.log( result[1] );     // 输出 捕获组:Script (first capturing group)
      console.log( result.length ); // 2
      
      // Additional information:
      console.log( result.index );  // 7 (match position)
      console.log( result.input );  // I love JavaScript (source string)
      
      在这里插入图片描述

5. 总结关于常见修饰符的使用

  • i:不区分大小写匹配
    var value = "HeLLo";
    
    var regex = /^hello$/i; 
    // var regex = new RegExp("^hello$","i");  // 使用构造函数创建方式
    
    alert(regex.test(value));
    
  • g: 全局匹配(查找所有匹配项,而不仅仅是第一个)。
    这个参考上面写的《3.5.2 match()的例子》中的例2,已经使用了这个修饰符,所以此处不介绍了。
  • g和i结合
    var value = "HeLLo-1-aa-hello-b-hEllo";
    
    // 下面两种正则方式均可以
    var regex = /hello/gi;  // 既全局匹配 又 忽略大小写匹配
    var regex_2 = new RegExp("hello","gi");  
    
    var result = value.match(regex);
    
    console.log(result); // 输出: ['HeLLo', 'hello', 'hEllo']
    
    在这里插入图片描述

6. 参考

  • 如下:
    https://javascript.info/regexp-methods.

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

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

相关文章

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时,需要输出相关日志信息,方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…

【Leetcode每日一刷】哈希表|纲领、242.有效的字母异位词、349. 两个数组的交集

纲领 🔗代码随想录理论部分 关于哈希表这个数据结构就不再重复讲了,下面对几个关键点记录一下: 哈希碰撞 解决方法1:拉链法 解决方法2:线性探测法 下面针对做题要用到的三种结构讲一下(也是重复造轮子了…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题 1

#需要资源或有问题的,可私博主!!! 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps 开发运维一体化”和“数据驱动产品开发”,拟采用开源 OpenStack …

C++:String类的使用

创作不易,感谢三连!! 在C语言中,我们想要存储字符串的话必须要用字符数组 char str[]"hello world"这其实是将在常量区的常量字符串拷贝到数组中,我们会在数组的结尾多开一个空间存储\0,这样我…

52.2k star! 自己部署gpt4free, 免费使用各种GPT

GPT4Free是一个由开发者Xtekky在GitHub上发布的开源项目,它可以免费地使用GPT-3.5、GPT-4、llama、gemini-pro、bard、claude等多种大模型。截止到当前(2024.1.30)已经有52.2k star,可见其受欢迎程度。 github地址:https://github.com/xtekky…

如何解决代理ip服务器连接问题

在当今的数字化时代,互联网连接已成为生活和工作中不可或缺的一部分。然而,在尝试访问互联网资源时,用户有时会遇到“代理服务器可能有问题,或地址不正确(你尚未连接)”的错误提示。这种情况通常表明计算机的网络设置存在问题&…

根据二层封装协议决定—网络类型

目录 一、网络类型的分类 二、数据链路层协议 MA网络 以太网协议 P2P网络 一、网络类型的分类 P2P --- point to point --- 点到点网络 MA --- Multi-Access Network --- 多点接入网络 BMA --- Broadcast Multi-Access Network --- 广播型多点接入网络 NBMA --- Non-Bro…

云计算 2月20号 (认识操作系统)

1、认识操作系统 计算机系统的组成 知识点1:没有软件系统的计算机称之为"裸机" 知识点2:裸机提供基本的可计算性资源 知识点3:操作系统是最靠近硬件的软件层,负责管理和控制计算机硬件。 计算机硬件组成五大部件 运算器…

Variant AutoEncoder(VAE)和 VQVAE 学习笔记和代码

参考: [1] VAE1 [2] https://lilianweng.github.io/posts/2018-08-12-vae/ [3] VAE Code 进食顺序 1 VAE1.1 VAE的直观理解1.2 VAE数学推导1.2.1 混合高斯模型角度理解VAE(李宏毅ML课的说法)1.2.2 隐空间角度理解以及ELBO(变分下界…

登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风

登录页给潜在用户传递了产品的品牌调性,是非常重要的一类页面,之前2.5D和插画风格的登录页流行一时,不过这阵风好像过去了,新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理,使得…

【算法】长短期记忆网络(LSTM,Long Short-Term Memory)

这是一种特殊的循环神经网络,能够学习数据中的长期依赖关系,这是因为模型的循环模块具有相互交互的四个层的组合,它可以记忆不定时间长度的数值,区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。 原理 黄…

Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟,人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制,人工智能在“传统”行业的落地不如消费互联网行业,但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

Windows系统x86机器安装龙芯(loongarch64)3A5000虚拟机系统详细教程

本次介绍在window系统x86机器上安装loongarch64系统的详细教程。 1.安装环境准备。 首先,你得有台电脑。 配置别太差,至少4核8G内存,安装window10或者11都行(为啥不能是Window7,你要用也不是不行,你先解决…

边缘计算与任务卸载基础知识

目录 边缘计算简介任务卸载简介参考文献 边缘计算简介 边缘计算是指利用靠近数据生成的网络边缘侧的设备(如移动设备、基站、边缘服务器、边缘云等)的计算能力和存储能力,使得数据和任务能够就近得到处理和执行。 一个典型的边缘计算系统为…

未来已来:智慧餐饮点餐系统引领餐饮业的数字化转型

时下,智慧餐饮点餐系统正在引领着餐饮业迈向更高的位置。今天,小编将与大家共同探讨智慧餐饮点餐系统的发展趋势、优势以及对餐饮业的影响。 一、智慧餐饮点餐系统的发展趋势 智慧餐饮点餐系统的出现填补了这一空白,它通过引入数字化技术&a…

学习助手:借助AI大模型,学习更高效!

在当今的数字时代,人工智能(AI)的崛起已经彻底改变了我们获取信息、处理数据以及学习新知识的方式。AI大模型,特别是如OpenAI开发的GPT-4这类先进的技术,已成为学习和教育领域的一大助力。本文旨在探索如何借助AI大模型…

5G时代对于工业化场景应用有什么改善

5G 不仅仅是 4G 的技术升级,而是将平板电脑和智能手机的技术升级。除了更好的高清视频流和其他高带宽应用,消费者不会注意到很多性能差异。然而,在工业领域,5G 代表着巨大的飞跃。 在工厂和厂房内, 设备的Wi-Fi 网络经…

Python+Selenium+Unittest 之Unittest1--简介

Unittest属于是一种单元测试框架,主要用于对代码中写好的单元内容进行验证,比如写好一个函数,可以使用unittest去进行验证该函数的代码逻辑是否有问题,对于自动化来说,可以去检验每条用例的内容是否符合预期。 Unittes…

Goose:Golang中的数据库迁移工具

Goose:Golang中的数据库迁移工具 在Golang开发中,数据库迁移是一个常见的任务,用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具,专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

php基础学习之错误处理(其二)

在实际应用中,开发者当然不希望把自己开发的程序的错误暴露给用户,一方面会动摇客户对己方的信心,另一方面容易被攻击者抓住漏洞实施攻击,同时开发者本身需要及时收集错误,因此需要合理的设置错误显示与记录错误日志 一…