[小白篇]字符串"克星"--正则表达式

前言

之前,在LeetCode上刷到一个字符串的题目,需要将其中的英文字符取出来,去除其他字符。原本按照我正常的思路,这个题目还有一点难度!最后发现,通过replace方法加上正则表达式就能轻轻松松解决问题!

所以今天!我们就来浅聊一下正则表达式!

正文

什么是正则表达式?

正则表达式(Regular Expression)是一种用于匹配字符串模式的工具。在JavaScript中,正则表达式被表示为字符串,而用来创建和操作它们的函数则被定义在JavaScript的RegExp对象中。

以下是一些基本的正则表达式概念和示例:

  1. 元字符 :这些字符具有特殊含义,如.(匹配任何字符),*(匹配前一个字符0次或多次),+(匹配前一个字符1次或多次),?(匹配前一个字符0次或1次),^(匹配字符串的开始),$(匹配字符串的结束),[abc](匹配方括号内的任何字符)等。
  2. 字符类:你可以使用方括号来定义字符类。例如,[abc]将匹配任何一个'a'、'b'或'c'字符。
  3. 选择、分组和引用 :你可以使用|来选择,使用括号来分组,使用\number来引用前面的子表达式。例如,(a|b)匹配'a'或'b',(ab)c匹配"ab"c,而(a|b)c则匹配"ac"或"bc"。
  4. 预定义模式:你可以使用预定义模式来匹配一些常见的字符串模式。例如,\d匹配任何数字,\w匹配任何字母或数字或下划线,\s匹配任何空白字符。
  5. 边界:你可以使用边界来指定字符串的位置。例如,^匹配字符串的开始,$匹配字符串的结束。
  6. 贪婪量词和非贪婪量词 :在JavaScript中,量词默认是贪婪的,但你可以使用问号(?)来改变这个行为。例如*,?将匹配尽可能少的重复字符,+?也是一样。
  7. 反向引用 :你可以使用\number来反向引用前面的子表达式。例如,(a|b)c\1将只匹配"acc"和"bcc"。

正则表达式的用法

书写一些常用的正则表达式语法:

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

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

  • .:匹配任意字符(除了换行符)。

  • *:匹配前一个字符0次或多次。

  • +:匹配前一个字符1次或多次。

  • ?:匹配前一个字符0次或1次。

  • {n}:匹配前一个字符n次。

  • {n,}:匹配前一个字符至少n次。

  • [abc]:匹配方括号内的任意字符。

  • \d:匹配任意数字。

  • \w:匹配任意字母、数字或下划线。

  • \s:匹配任意空白字符。

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

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

  • .:匹配任意字符(除了换行符)。

  • *:匹配前一个字符0次或多次。

  • +:匹配前一个字符1次或多次。

  • ?:匹配前一个字符0次或1次。

  • {n}:匹配前一个字符n次。

  • {n,}:匹配前一个字符至少n次。

  • [abc]:匹配方括号内的任意字符。

  • \d:匹配任意数字。

  • \w:匹配任意字母、数字或下划线。

  • \s:匹配任意空白字符。

接下来,我们来通过一些常用案例来学习正则表达式的用法!

一些使用案例

正则表达式.test()字符串方法

js 复制代码
var str = 'a14'
var jud = /[^a-b]/
var result = jud.test(str)
console.log(result)
js 复制代码
输出:true

在这段代码中,我们定义了一个str字符串,同时定义了jud正则表达式,通过正则表达式调用text()方法判断。var jud = /[^a-b]/:定义一个正则表达式jud,该表达式匹配任何不包括在ab之间的字符[^abc]表示不是字符a或b或c的内容[a]则是匹配正则表达式中是否符合表达式中的形式,^表示取反

我们也可以这样用

js 复制代码
var str = 'a'
var result = /[^a-b]/.test(str)
console.log(result)
js 复制代码
输出:false

字符串.replace()字符串方法--这个方法便是我刷题时用到的方法!!

js 复制代码
var str = 'a/bc142'
var result = str.replace(/[^a-zA-Z1-9]/,'')
console.log(result)
js 复制代码
输出:abc142

这一个案例我们利用^取反标记将str中非英文字母和数字的字符变为''空,也就是将他们去除了。

我如果这样做,就可以理清楚其中^取反的效果了

js 复制代码
var str = 'a/bc142'
var result = str.replace(/[a-zA-Z1-9]/g,'')/*g表示全局匹配*/
console.log(result)
输出:/

没有^表示取和他们匹配的元素,后面加了g表示全局匹配,没有g的话只会匹配一个。

字符串.match(正则表达式)查找方法

js 复制代码
var str = 'a12b4cou/'
var result = str.match(/\d/g)
console.log(result)
js 复制代码
输出:[ '1', '2', '4' ]

这一段代码我们通过正则表达式获取字符串当中所有数字!返回其中的数字!

正则表达式.exec(字符串) 匹配项

js 复制代码
//exec匹配项目
var str = 'a12b4cou'
var result = /[a-z]/g.exec(str)
console.log(result)
js 复制代码
输出:[ 'a', index: 0, input: 'a12b4cou', groups: undefined ]

声明了一个名为 result 的变量,并将其初始化为一个正则表达式 /[a-z]/gstr 字符串执行 exec 方法的结果。

正则表达式 /[a-z]/g 的含义是匹配任何一个小写字母(从 az),并且 g 标志表示全局搜索,即查找整个字符串中的所有匹配项,而不仅仅是第一个。

exec 方法返回一个数组,其中包含第一个匹配项,或者如果没有找到匹配项则为 null。这个数组还包含一个名为 index 的属性,表示匹配项在字符串中的位置。

所以,如果 str'a12b4cou',那么 result 将是一个数组,其中包含元素 'a',并且 index0

字符串.search(正则表达式)搜索匹配

js 复制代码
var str = 'abco4u'
var result = str.search(/[1-9]/)
console.log(result)
js 复制代码
输出:4

声明了一个名为 str 的变量,并将其初始化为一个字符串 'abco4u'这行代码调用了 str 对象的 search 方法,传递了一个正则表达式 /[1-9]/g 作为参数,并将返回的结果存储在 result 变量中。

search 方法会查找字符串中与正则表达式匹配的第一个子字符串,并返回其位置。如果没有找到匹配项,它将返回 -1

区别: .test()方法是正则表达式提供的,.search()是字符串提高的, .test()方法返回布尔值,search()返回下标

最后

正则表达式在字符串处理中有着广泛的应用,它能帮助我们以特定的模式匹配、查找或者替换字符串中的子串。接下来是一些常见的正则表达式应用与方法:

  1. 模式匹配 :这是正则表达式最基本的应用。例如,我们可以使用正则表达式 a[0-9]+b 来匹配所有以字母'a'开始,以'b'结束,中间由一个或多个数字组成的字符串。
  2. 查找符合特定模式的子串 :我们可以使用 RegExp.prototype.exec() 方法来查找符合特定模式的子串。如 var regex = /a[0-9]+b/; var str = 'abc123bdef456b'; var result = regex.exec(str); 这段代码会返回 '123b',即第一个符合模式的子串。
  3. 替换符合特定模式的子串 :我们可以使用 String.prototype.replace() 方法和正则表达式的 g 标志来替换所有符合特定模式的子串。如 var regex = /a[0-9]+b/g; var str = 'abc123bdef456b'; var result = str.replace(regex, 'x'); 这段代码会把所有符合 a[0-9]+b 模式的子串替换为 'x',结果为 'axxbx'.
  4. 分割字符串 :我们可以使用 RegExp.prototype.split() 方法来根据特定的模式分割字符串。如 var str = 'a1b2c3'; var result = str.split(/[1-9]/); 这段代码会返回 ['', 'a', 'b', 'c', ''],即将字符串按照数字进行分割。
  5. 验证字符串 :我们可以使用正则表达式来验证字符串是否符合特定的格式。例如,我们可以使用 /^\d{3}-\d{2}-\d{4}$/ 这个正则表达式来验证一个字符串是否是美国标准的日期格式(例如 '123-45-6789')。

我们今天主要介绍了五种正则表达式配上方法在字符串中应用!!

如果你有任何建议或者指正,欢迎评论留言!!点个小赞鼓励支持一下吧!🌹🌹🌹

相关推荐
cwtlw4 分钟前
CSS学习记录20
前端·css·笔记·学习
界面开发小八哥8 分钟前
「Java EE开发指南」如何用MyEclipse构建一个Web项目?(一)
java·前端·ide·java-ee·myeclipse
Kenneth風车16 分钟前
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)11
算法·机器学习·分类
最后一个bug21 分钟前
rt-linux中使用mlockall与free的差异
linux·c语言·arm开发·单片机·嵌入式硬件·算法
米奇妙妙wuu23 分钟前
react使用sse流实现chat大模型问答,补充css样式
前端·css·react.js
傻小胖28 分钟前
React 生命周期完整指南
前端·react.js
梦境之冢1 小时前
axios 常见的content-type、responseType有哪些?
前端·javascript·http
racerun1 小时前
vue VueResource & axios
前端·javascript·vue.js
蹉跎x1 小时前
力扣1358. 包含所有三种字符的子字符串数目
数据结构·算法·leetcode·职场和发展
m0_548514771 小时前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript