您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

正则表达式,这篇看完就够了

时间:2023-02-20 14:17:10  来源:  作者:农民工说前端

正则表达式是一种用于匹配文本模式的工具,它能够帮助我们在处理文本时更加高效地进行搜索、替换和验证操作。在本篇文章中,我将通过通俗易懂的语言让正则表达式不再苦涩难懂。

基本规则

在正则表达式中,除了基本的字符匹配规则、字符类和量词外,还有一些特殊的符号和元字符,它们在正则表达式中具有特殊的含义和作用。以下是一些常见的正则表达式符号和元字符的说明:

  • /:正则表达式的开始和结束符号。
  • ^:表示匹配文本的开头。例如,/^abc/ 表示匹配以 "abc" 开头的文本。
  • $:表示匹配文本的结尾。例如,/abc$/ 表示匹配以 "abc" 结尾的文本。
  • .:匹配任意单个字符,不包括换行符。例如,/a.c/ 表示匹配以 "a" 开头,"c" 结尾,中间有任意一个字符的文本。
  • |:表示或,可以用于匹配多个表达式中的任意一个。例如,/abc|def/ 表示匹配 "abc" 或 "def"。
  • []:表示字符集,用于匹配一组字符中的任意一个。例如,/[abc]/ 表示匹配字母 "a"、"b" 或 "c" 中的任意一个。
  • ():表示分组,可以将一部分正则表达式放在括号中,并对它们进行分组匹配。例如,/(ab)+/ 表示匹配一或多个 "ab"。
  • ?:表示可选,用于匹配前面的字符或表达式出现零次或一次。例如,/a?b/ 表示匹配零个或一个 "a",后面紧跟一个 "b"。
  • *:表示零个或多个,用于匹配前面的字符或表达式出现零次或多次。例如,/ab*c/ 表示匹配一个 "a",后面跟着零个或多个 "b",最后紧跟一个 "c"。
  • +:表示一或多个,用于匹配前面的字符或表达式出现一次或多次。例如,/ab+c/ 表示匹配一个 "a",后面跟着一个或多个 "b",最后紧跟一个 "c"。
  • {}:表示重复次数,用于指定前面的字符或表达式重复出现的次数范围。例如,/ab{2,4}c/ 表示匹配一个 "a",后面跟着两到四个 "b",最后紧跟一个 "c"。
  • :表示转义字符,用于将特殊字符转义为普通字符。例如,/a./ 表示匹配一个 "a",后面跟着一个 "."。

以上是一些常见的正则表达式符号和元字符的说明,还有一些比较重要的符号和元字符:

  • [] 中的 ^:表示不在字符集中,用于匹配不属于指定字符集中的任意字符。例如,/[^abc]/ 表示匹配除了 "a"、"b"、"c" 之外的任意字符。
  • [] 中的 -:表示字符范围,用于匹配指定范围内的任意字符。例如,/[a-z]/ 表示匹配任意小写字母。
  • () 中的 |:表示分组中的或,可以用于匹配分组中的任意一个表达式。例如,/(ab|cd)/ 表示匹配 "ab" 或 "cd"。

API

JAVAScript中,可以使用RegExp对象来创建正则表达式。以下是RegExp对象的一些常用方法:

  • test()

用于测试一个字符串是否匹配正则表达式。该方法返回一个布尔值,表示是否匹配成功。

var regex = /^[a-z]+$/; // 匹配小写字母
var str1 = "hello";
var str2 = "Hello";
console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // fals
  • exec()

exec() 方法用于在一个字符串中查找匹配的文本,并返回第一个匹配的结果。如果没有找到匹配的文本,则返回 null。

该方法返回一个数组,数组的第一个元素是匹配的文本,后面的元素是捕获分组的匹配结果。如果没有捕获分组,则数组的长度为 1。

var regex = /(d{4})-(d{2})-(d{2})/; // 匹配日期格式(yyyy-mm-dd)
var str = "Today is 2023-02-19";
var result = regex.exec(str);
console.log(result); // ["2023-02-19", "2023", "02", "19"]
  • match()

match() 方法用于在一个字符串中查找匹配的文本,并返回所有匹配的结果。该方法返回一个数组,数组中的每个元素都是匹配的文本,数组的长度就是匹配次数。

如果正则表达式中有捕获分组,则返回的数组中每个元素也会包括捕获分组的匹配结果。

var regex = /cat/g; // 匹配所有的 "cat"
var str = "The cat in the hat sat on the mat.";
var result = str.match(regex);
console.log(result); // ["cat", "cat", "cat"]
  • replace()

用于在一个字符串中替换匹配的文本。该方法接受两个参数,第一个参数是要替换的文本或正则表达式,第二个参数是用于替换的新文本或函数。

如果第一个参数是正则表达式,则可以在替换文本中使用 $1、$2 等语法来引用捕获分组的匹配结果。

var regex = /world/g;
var str = "hello world";
var newStr = str.replace(regex, "JavaScript");
console.log(newStr); // "hello JavaScript"

var regex2 = /(d{4})-(d{2})-(d{2})/;
var str2 = "Today is 2023-02-19";
var newStr2 = str2.replace(regex2, "$2/$3/$1");
console.log(newStr2); // "Today is 02/19/2023"

练习题

// 匹配以 "a" 开头,"b" 结尾的字符串
var regex1 = /^a.*b$/;

// 匹配以 "abc" 或 "def" 开头的字符串
var regex2 = /^(abc|def).*/;

// 匹配以 "a" 开头,后面跟着一个或多个 "b",最后紧跟一个 "c" 的字符串
var regex3 = /^ab+c$/;

// 匹配任意一个小写字母或数字的字符串
var regex4 = /^[a-z0-9]+$/;

// 匹配以 "http://" 或 "https://" 开头的 URL
var regex5 = /^(http|https)://.*/;

// 匹配日期格式(yyyy-mm-dd)
var regex6 = /^d{4}-d{2}-d{2}$/;

// 匹配电话号码(格式为:xxx-xxxxxxx 或 xxxxxxxxxxx)
var regex7 = /^d{3}-?d{7}$|^d{10}$/;

// 匹配邮箱地址
var regex8 = /^w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*$/;

// 使用正则表达式进行字符串替换
var str = "hello world";
var newStr = str.replace(/world/, "JavaScript");

console.log(newStr); // "hello JavaScript"


Tags:正则表达式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
知道这些正则表达式,能让你少写1000行代码
校验密码强度 密码长度为8-16位 必须包含至少一个大写字母、一个小写字母和一个数字^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,16}$这个正则表达式的含义是: ^ 表示匹...【详细内容】
2023-11-30  Search: 正则表达式  点击:(163)  评论:(0)  加入收藏
Python正则表达式:高效处理文本数据的秘诀!
当谈到文本处理和搜索时,正则表达式是Python中一个强大且不可或缺的工具。正则表达式是一种用于搜索、匹配和处理文本的模式描述语言,可以在大量文本数据中快速而灵活地查找、...【详细内容】
2023-10-15  Search: 正则表达式  点击:(120)  评论:(0)  加入收藏
正则表达式进阶--玩转分组、前瞻和后顾
前言正则表达式是一种强大的模式匹配工具,可以用于在字符串中查找、替换和提取特定的文本。分组是一项非常重要的功能,它允许我们将模式进行分组,并在匹配过程中对分组进行操作...【详细内容】
2023-09-20  Search: 正则表达式  点击:(302)  评论:(0)  加入收藏
15 个常用的正则表达式技巧
你对正则表达式有何看法?我猜你会说这太晦涩难懂了,我对它根本不感兴趣。是的,我曾经和你一样,以为我这辈子都学不会了。但我们不能否认它确实很强大,我在工作中经常使用它,今天,我...【详细内容】
2023-09-05  Search: 正则表达式  点击:(270)  评论:(0)  加入收藏
20 个你应该掌握的强大而有用的正则表达式
一起来了解下20 个你应该掌握的强大而有用的正则表达式都有哪些。1.货币格式化我经常需要在工作中使用到格式化的货币,使用正则表达式让这变得非常简单。const formatPrice =...【详细内容】
2023-06-13  Search: 正则表达式  点击:(364)  评论:(0)  加入收藏
灾难性回溯:正则表达式如何导致ReDoS漏洞?
当用户需要搜索和替换文本时,正则表达式就会派上用场。然而,在某些情况下,它们可能会导致系统变慢,甚至容易受到ReDoS攻击。 ​简介​ReDoS是DoS攻击的一种子类型。ReDoS攻击的...【详细内容】
2023-03-28  Search: 正则表达式  点击:(183)  评论:(0)  加入收藏
正则表达式,这篇看完就够了
正则表达式是一种用于匹配文本模式的工具,它能够帮助我们在处理文本时更加高效地进行搜索、替换和验证操作。在本篇文章中,我将通过通俗易懂的语言让正则表达式不再苦涩难懂。...【详细内容】
2023-02-20  Search: 正则表达式  点击:(119)  评论:(0)  加入收藏
JavaScript正则表达式加密
JavaScript正则表达式加密正则表达式可以加密吗?是的,可以。起码可以确定的是在JavaScript编程中是可以的。正则表达式加密有什么用?可以隐藏一些重要的、私密的字符串内容,使代...【详细内容】
2022-11-27  Search: 正则表达式  点击:(276)  评论:(0)  加入收藏
Java正则表达式语法有哪些?
许多人在学习Java的过程中都会对Java正则表达式产生困惑,今天“好程序员”就将为大家解答如下问题:Java正则表达式是什么?Java正则表达式的规则有哪些?正则表达式语法有哪些?正则...【详细内容】
2022-11-01  Search: 正则表达式  点击:(337)  评论:(0)  加入收藏
算法:正则表达式匹配
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题...【详细内容】
2022-07-13  Search: 正则表达式  点击:(375)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(13)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(77)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(96)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(63)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(108)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(165)  评论:(0)  加入收藏
站内最新
站内热门
站内头条