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

前言

之前,在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')。

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

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

相关推荐
无双_Joney8 小时前
[更新迭代 - 1] Nestjs 在24年底更新了啥?(功能篇)
前端·后端·nestjs
在云端易逍遥8 小时前
前端必学的 CSS Grid 布局体系
前端·css
ccnocare8 小时前
选择文件夹路径
前端
艾小码8 小时前
还在被超长列表卡到崩溃?3招搞定虚拟滚动,性能直接起飞!
前端·javascript·react.js
闰五月8 小时前
JavaScript作用域与作用域链详解
前端·面试
泉城老铁8 小时前
idea 优化卡顿
前端·后端·敏捷开发
前端康师傅8 小时前
JavaScript 作用域常见问题及解决方案
前端·javascript
CoovallyAIHub8 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
司宸8 小时前
Prompt结构化输出:从入门到精通的系统指南
前端