一文带你快速了解JS正则表达式的使用方法

javascript中如何使用正则表达式?下面本篇文章带大家深入了解一下javascript正则表达式的使用方法,希望对大家有所帮助!

一文带你快速了解JS正则表达式的使用方法

I. 序言:JavaScript中正则表达式的使用场景

本期博客带大家了解一下JavaScript中如何使用正则表达式,那么最开始,序言的”序言”部分,我先解释一下为什么有这篇文章:

序言的”序言”:首先必须说明的是,这类文章(js正则表达式)在c站或者整个it类论坛是很多人写过的,而我认为我这篇的不同之处在于更加“小白”化,这也与我一贯的风格有关吧。关于JavaScript正则表达式,其他的文章大多一上来就太过激进,不利于初学者学习(我当粗就是这么被劝退的),这也是我为什么要坚持写这篇文章,希望小白在看了这篇文章后,不管能不能完全掌握JavaScript正则表达式,但至少对JavaScript正则表达式能有一个比较深刻的印象吧。【推荐学习:javascript视频教程】

一文带你快速了解JS正则表达式的使用方法

那下面正式进入序言部分,我们先了解一下为什么在JavaScript中需要正则表达式,这里如果之前学过其他编程语言,应该大致对正则表达式会有一个理解,但没有学过的也不用担心:

正则表达式大白话就是一个能判定你的输入内容是否符合设计者规定的一个式子

从大白话,不难听出,它有以下的作用:

1️⃣ 测试字符串是否合规

这种特性常被用来检测前端输入的字段是否符合要求,常见的场景是注册时输入账号、密码、邮箱等的测试。

一文带你快速了解JS正则表达式的使用方法

2️⃣ 替换某确定的文本

这种特性能够使我们通过js批量替换某个已存在的文本,替换为我们需要的文本,作用场景比较多,就不一一举例了。

3️⃣ 从字符串中提取一个子字符串/是否包含某子字符串

最后一个特性用的不是很多,但是的确可以实现:通过设置提取需求,从长字符串批量提取子字符串。第二重特性,是否包含某子字符串,可以用来过滤一些字符串

以上是正则表达式在前端的作用,其实正则表达式不仅仅用于前端,在很多时候也能做一些其他文本的匹配和替换工作(因此学会了js中它的用法,在其他语言也可以轻松掌握,因为重在思想),在前端,它更多时候工作在上面的第一个作用:校验输入的字段

II. 创建第一个正则表达式

首先,是时候见证真正的技术了,我们尝试在js里书写第一个属于我们的正则表达式

var  regexp_1 = /a/;var  regexp_2 = new Regexp("a");

上面,我给了两种写法,这两种写法,常用的是第一种第一种与第二种完全等效,都是创建一个正则表达式(以后看见代码里字符串有俩斜线包裹,别再怀疑了,就是正则!)。

没错,这就是正则表达式的创建方法,是不是灰常简单,没有那么高大上吧。上面创建的正则表达式,表达的含义是匹配字符‘a’,且没有特殊的匹配规则

别看上面只有这么简单的一个表达式,其实它已经可以被我们去使用了,我们看下面这个例子:

   function demo() {        var regexp_1 = /a/;        var str = 'abc'        alert(regexp_1.test(str))    }   demo()

这上面的就是一个小例子,当然了大家不用管里面的test函数,因为我们还没讲到,不过大家先记住:

test函数是正则表达式最基础的一个函数,作用是对传入的字符串进行固定格式、内容的匹配。(后面部分会再点到这个函数)

这里我们了解一下我们写的正则表达式是可以被使用的,因为上面的代码就涉及了一个简单的正则表达式的使用

III. 常见的正则表达式属性

? 三种匹配规则

首先介绍一下正则表达式的三种匹配规则

匹配规则符号规则含义i匹配时忽略大小写g执行全局匹配(会匹配整个语句,而非匹配到第一个目标后终止)m执行多行匹配

它们的语法是这样的:

var  regexp_1 = /a/i;var  regexp_2 = /a/g;var  regexp_3 = /a/m;var  regexp_4 = new Regexp("a","i"); var  regexp_5 = new Regexp("a","g"); var  regexp_6 = new Regexp("a","m"); var  regexp_7 = new Regexp("a","igm"); var  regexp_8 = /a/igm;

上面展示了两种正则表达式定义方法下的匹配规则的语法:

对于第一种正则表达式,我们直接在斜线后加上匹配规则对应的符号即可;

对于第二种正则表达式,我们在括号里传入第二个参数即可,参数仍然是对应的符号;

补充:其实不传入参数、斜线后面不写任何东西,代表了默认情况,也就是普通的正则匹配

最后要说明的是,可以有多种规则同时执行,例如可以同时忽略大小写、全局匹配(需要几个就加几个参数符号)

我们拿忽略大小写做一个小demo:

    function demo() {        var regexp_1 = /a/;        var regexp_2 = /a/i;        var str = 'Abc'        alert(regexp_1.test(str))        alert(regexp_2.test(str))    }    demo()

其中,第一个弹窗是False,第二个是True,大家也可以点这里试验一下:【点我揭晓】

? 五种常见属性

接下来,我们讲解一下五种常见的正则表达式的属性:

啥,你问我啥叫正则表达式的五种属性?就是 /a/ 的五种属性,这句话就是这么理解的,也就是这个表达式会有五种属性,它们分别是:

属性说明ignoreCase返回一个布尔值True代表正则表达式设置了 i 匹配规则(忽略大小写)False代表未设置。global    返回一个布尔值True代表正则表达式设置了 g 匹配规则(全局匹配)False代表未设置。multiline返回一个布尔值True代表正则表达式设置了 m 匹配规则(多行匹配)False代表未设置。lastIndex返回一个int值,表示下一次搜索开始的索引位置只在设置了 g 匹配规则时才有实用意义。source返回一个字符串,字符串是正则表达式的字符串形式(不含斜线)

除了lastIndex其他四个大家应该都能从字面理解,关于lastIndex,我会在下一个部分单独介绍它。

? 规则g的使用详解

最后,由于规则g:全局匹配,不容易理解,我们单独拿出来讲一讲,而且讲g的同时,顺便把上面提到的lastIndex也一起讲了:

我们先看这样一个字符串:

str = ‘s_s_s_s_s_s_s_s’

假如目标是匹配s,那么使用普通的正则表达式,例如:

regexp = ‘/s/’

我们确实匹配了,但是只匹配了第一个s,换句话说没有把所有的s匹配到,那么如果我们想要把整个句子里的s都匹配一下,这时 g 就发挥作用了

我们现在有需求:匹配每一个s,并依次输出s的索引,此时我们的第一步是定义一个g模式的正则表达式

SpeakingPass-打造你的专属雅思口语语料 SpeakingPass-打造你的专属雅思口语语料

使用chatGPT帮你快速备考雅思口语,提升分数

SpeakingPass-打造你的专属雅思口语语料 25 查看详情 SpeakingPass-打造你的专属雅思口语语料

var regexp = '/x/g'

那么索引要怎么办呢?哎这时候就用到了lastIndex,还记得吗,它代表了下一次正则表达式匹配的起始索引:

    function demo() {        var regexp = /s/g        var str = 's_s_s_s_s_s_s_s'        regexp.test(str)        alert(regexp.lastIndex)        regexp.test(str)        alert(regexp.lastIndex)        regexp.test(str)        alert(regexp.lastIndex)        regexp.test(str)        alert(regexp.lastIndex)        regexp.test(str)        alert(regexp.lastIndex)        }    demo()

此时,我们就实现了索引的获取(注意,这里弹出的并不是索引,是索引加一,减去一就是真正的索引)

IV. 常见的正则表达式方法举例介绍

? test方法

首先当然是我们最常用的test()方法了,它有以下功能:

test() 方法是正则表达式最常用一个方法,用于检测一个字符串是否匹配某个模式.

test ()方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false,这一点在刚才上面的小案例里,大家都有体会。

同时搭配g模式,test方法也可以进行全文的检查,上面的demo也有提到,这里不过多赘述。它的标准语法格式是这样的

var regexp = /xxx/var str = 'xxx'var boolean_value = regexp.test(regexp)

? 正则子表达式匹配

在讲exec()方法之前,我们插播一个知识点:子表达式匹配。

什么意思呢?我们观察一下之前写的正则表达式,都是一整个式子进行匹配,那么有没有可以在一个式子里有一些子式子的写法呢?大家可能到这儿没有太理解子表达式的意思,那我举个例子:

现在有这样一个式子:

str = ‘st_s_s_s_s_s_s_s’

我想要先匹配 st_ 这个字符串,那么正则表达式大家都会写

var regexp = /st_/

那如果我接下来想要,先匹配一下st_,匹配到之后再匹配一下里面的 t 和 _ ,也就是我想要一次把st_  、t 和 _ 都匹配出来,要怎么办呢?这样写就可以了:

var regexp = /s(t)(_)/

于是我们知道了,括号的内容代表子表达式,而且在第一次匹配时,它会默认把所有的括号去掉,做一个整体匹配,例如上面的例子,第一波匹配时,表达式相当于是: /st_/ 。

只有整体匹配成功,后面的子字符串匹配才会被执行匹配,否则如果整体没有匹配到,即使子字符串能匹配到内容,也都会被返回空值。(这句话先不用理解,下面的exec()方法会再讲)

? exec方法

exec()方法,比普通的test()方法更加复杂,同时能做的事情也更复杂:

exec() 方法用于检索字符串中的正则表达式的匹配。

exec()方法返回的是一个字符串的数组:

整句匹配失败时,会返回一个null的空数组

否则,有:数组的第0个元素存储的是整句匹配到的字符串第1个元素存放的是第一个引用型分组(子表达式)匹配的字符串第2个元素存放的是第二个引用型分组(子表达式)匹配的字符串,依次类推。

看到这里,我要开始填坑了:刚才提到了如果整句匹配失败,那么即使子字符串能够成功匹配,也会被返回空值,是什么意思呢?我们举一个例子,看下面的代码

    function demo() {        var regexp = /s(t_)(_)/        var str = 'st_s_s_s_s_s_s_s'        var list = regexp.exec(str)        document.write(list[0])        document.write('
') document.write(list[1]) document.write('
') document.write(list[2]) } demo()

这段代码大家现在肯定能看懂,那么有奖竞猜:上面代码执行之后,页面上会被写什么内容?

答案是:【点我揭晓】

是不是出乎意料?啥也没有是吧?那就对了,因为这就是整句匹配失败的后果,我们解析一下:

首先,由于包含子字符串,我们第一次先整句匹配,把括号取消,那么正则表达式变成:

regexp = /st__/(注意,这里是有两个下划线的)

于是真相很明显了:st__不存在,所以整句匹配失败了,于是即便子字符串s_和_能够被匹配到,一样不会有结果,到这里我算是把这块给大家讲清楚了?

那么大家应该对exec()方法有一定了解了,那我最后举一个成功实现多匹配的例子:

    function demo() {        var regexp = /s(t)(_)/        var str = 'st_s_s_s_s_s_s_s'        var list = regexp.exec(str)        document.write(list[0])        document.write('
') document.write(list[1]) document.write('
') document.write(list[2]) } demo()

大家发现,我只是把第一个子表达式的下划线去掉了,那么结果截然不同,这次三个内容都被写上去了,大家可以自行查看:【点我揭晓】

这里有人就很”贪心了”,可能会问list[3]是啥呀

list[3]是undefined,因为exec()方法只会执行一次匹配,因此它在三个表达式(总式、两个子表达式)匹配之后就会停止,因此一共只有三个值。

? 字符串的常见函数

最后是字符串的常见函数,注意,各位别弄混了,这是字符串的常见函数,调用函数的对象是字符串,不是正则表达式,但是传参可以是正则表达式

var str = 'xxx'// 1. search(): 检索字符串中与指定的子字符串或正则表达式相匹配的子字符串。// 返回找到的第一个字符的位置,如果未找到返回-1// 该方法将忽略"g"标志和正则对象的lastIndex属性(即总是从开头找起)var index = str.search(Regexp/String);// 2. match(): 在字符串内查找一个或多个与正则表达式匹配的字符串,返回一个对象// 若没开启"g"标志,将只查找第一个匹配的字符串,返回一个对象// 该对象包含下标0、index、input,其中下标0等价于index,input是String的引用// 开启"g",返回一个数组,数组的length是匹配的字符串个数,每个元素是每个匹配的起始字符位置var list = str.match(Regexp/String)// 3.replace() : 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串str.replace(yourRegexp/String,new_String)

V. 正则表达式的常见匹配语法汇总

这部分,我用一张图给大家展示一下常见的匹配语法,大家可以记住图上的一些语法,但不必都记住,需要的时候点开看就行图大家可以自行收藏(原创,大家勿二改)

一文带你快速了解JS正则表达式的使用方法

VI. 实例:一个简单的注册校验

最后,给大家送一个简单的注册校验:

    简单注册校验                        function check() {            var number = document.getElementById("number").value;            if (number == "") {                alert("手机号不能为空哦");                return false;            }            if (/^[0-9][1-9]{10}$/.test(number) == false) {                alert("手机号的格式不对");                return false;            }            var pwd = document.getElementById("pwd").value;            if (pwd == "") {                alert("密码不能为空");                return false;            }            if (pwd.length  12) {                alert("密码的长度太长,应该小于12");                return false;            }            if (/[A-Z]/.test(pwd) == false) {                alert("密码至少要包含一个大写字母");                return false;            }            var pwd2 = document.getElementById("pwd2").value;            if (pwd != pwd2) {                alert("两次输入的密码不一样,请重新输入");                return false;            }            return true;        }        

注册账户

请填写注册手机号:
请填写注册密码:
请再次输入密码:

大家可以根据从文中学习到的知识点,丰富上面这个案例,可以参考一些现成的网站注册页面,做更多的校验

更多编程相关知识,请访问:编程教学!!

以上就是一文带你快速了解JS正则表达式的使用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/541795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 15:37:17
下一篇 2025年11月9日 15:38:30

相关推荐

  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结

    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结 随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除了对美学的理解和创意的运用外,还需要掌握一些基本的技能,如…

    2025年12月24日
    200
  • 学完HTML和CSS之后我应该做什么?

    网页开发是一段漫长的旅程,但是掌握了HTML和CSS技能意味着你已经赢得了一半的战斗。这两种语言对于学习网页开发技能来说非常重要和基础。现在不可或缺的是下一个问题,学完HTML和CSS之后我该做什么呢? 对这些问题的答案可以分为2-3个部分,你可以继续练习你的HTML和CSS编码,然后了解在学习完H…

    2025年12月24日
    000
  • 聊聊怎么利用CSS实现波浪进度条效果

    本篇文章给大家分享css 高阶技巧,介绍一下如何使用css实现波浪进度条效果,希望对大家有所帮助! 本文是 CSS Houdini 之 CSS Painting API 系列第三篇。 现代 CSS 之高阶图片渐隐消失术现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式! 在上两篇中,我们…

    2025年12月24日 好文分享
    200
  • 巧用距离、角度及光影制作炫酷的 3D 文字特效

    如何利用 css 实现3d立体的数字?下面本篇文章就带大家巧用视觉障眼法,构建不一样的 3d 文字特效,希望对大家有所帮助! 最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果: 这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗? 不是特…

    2025年12月24日 好文分享
    000
  • CSS高阶技巧:实现图片渐隐消的多种方法

    将专注于实现复杂布局,兼容设备差异,制作酷炫动画,制作复杂交互,提升可访问性及构建奇思妙想效果等方面的内容。 在兼顾基础概述的同时,注重对技巧的挖掘,结合实际进行运用,欢迎大家关注。 正文从这里开始。 在过往,我们想要实现一个图片的渐隐消失。最常见的莫过于整体透明度的变化,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • css实现登录按钮炫酷效果(附代码实例)

    今天在网上看到一个炫酷的登录按钮效果;初看时感觉好牛掰;但是一点一点的抛开以后发现,并没有那么难;我会将全部代码贴出来;如果有不对的地方,大家指点一哈。 分析 我们抛开before不谈的话;其实原理和就是通过背景大小以及配合位置达到颜色渐变的效果。 text-transform: uppercase…

    2025年12月24日
    000
  • CSS flex布局属性:align-items和align-content的区别

    在用flex布局时,发现有两个属性功能好像有点类似:align-items和align-content,乍看之下,它们都是用于定义flex容器中元素在交叉轴(主轴为flex-deriction定义的方向,默认为row,那么交叉轴跟主轴垂直即为column,反之它们互调,flex基本的概念如下图所示)…

    2025年12月24日 好文分享
    000
  • 手把手教你用 transition 实现短视频 APP的点赞动画

    怎么使用纯 css 实现有趣的点赞动画?下面本篇文章就带大家了解一下巧妙借助 transition实现点赞动画的方法,希望对大家有所帮助! 在各种短视频界面上,我们经常会看到类似这样的点赞动画: 非常的有意思,有意思的交互会让用户更愿意进行互动。 那么,这么有趣的点赞动画,有没有可能使用纯 CSS …

    2025年12月24日 好文分享
    000
  • 巧用CSS实现各种奇形怪状按钮(附代码)

    本篇文章带大家看看怎么使用 CSS 轻松实现高频出现的各类奇形怪状按钮,希望对大家有所帮助! 怎么样使用 CSS 实现一个内切角按钮呢、怎么样实现一个带箭头的按钮呢? 本文基于一些高频出现在设计稿中的,使用 css 实现稍微有点难度和技巧性的按钮,讲解使用 css 如何尽可能的实现它们。【推荐学习:…

    2025年12月24日 好文分享
    000
  • 原来利用纯CSS也能实现文字轮播与图片轮播!

    怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯css也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助! 今天,分享一个实际业务中能够用得上的动画技巧。【推荐学习:css视频教程】 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • 总结整理:需要避坑的五大常见css错误(收藏)

    本篇文章给大家总结5个最常见的css错误,并介绍一下避坑方法,希望对大家有所帮助! 正如我们今天所知,CSS语言是web的一个重要组成部分。它使我们有能力绘制元素在屏幕、网页或其他媒体中的展示方式。 它简单、强大,而且是声明式的。我们可以很容易地实现复杂的事情,如暗黑/光明模式。然而,对它有很多误解…

    2025年12月24日
    000
  • CSS+JS实现爱心点赞按钮(代码示例)

    本篇文章给大家介绍一下css+js实现一个“爱之满满”点赞按钮的方法,希望对大家有所帮助! 前段时间在看一档说唱节目,被里面的一个说唱歌手JBcob的爱之满满这句词给洗脑了。 于是这次给大家带来一个爱之满满的点赞按钮,让大家在点赞的同时还能感受到被爱包裹的感觉。 立即学习“前端免费学习笔记(深入)”…

    2025年12月24日 好文分享
    000
  • 让人眼前一亮的五个前端小技巧

    为了让大家编程更轻松一些,本挑选一些有用的但相对比较少见有用的技巧。废话不多说,开车了。 1.快速隐藏 要隐藏一个DOM元素,不需要JavaScript。一个原生的HTML属性就足以隐藏。其效果类似于添加一个style display: none;。 该段落在页面上是不可见的,它对HTML是隐藏的。…

    2025年12月24日
    000
  • 如何实现炫酷的数字大屏

    依托强大无远开发平台,可以快速实现带各种酷炫联动效果的数字化大屏。一起来看一下吧 DEMO 地址:https://previewer.wuyuan.io/p… 配置地址:https://workbench.wuyuan.io/p… 效果图 1 效果图 2 实现步骤 1. 完成…

    2025年12月24日 好文分享
    000
  • 使用JS或CSS如何实现瀑布流布局,几种方案介绍

    本篇文章带大家了解一下瀑布流布局,介绍一下三种靠谱js方案,以及n种不靠谱css方案。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 本着实用精神,我们今天来分享一下瀑布流布局(昨天有个小兄弟问我怎么做,我找了半天没找到,啊原来写在内网了)。 演示地址: http://www.li…

    2025年12月24日 好文分享
    000
  • 详解CSS3+SVG滤镜实现不规则边框的方法

    本篇文章将介绍一种配合 svg 滤镜实现各种不规则图形添加边框的小技巧。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 需求背景,给不规则图形添加边框 在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些: 使用纯 CSS,搭配一些技巧,是可以制作出上面的图形的,当然…

    2025年12月24日 好文分享
    000
  • 5个有用的css函数(分享)

    CSS 包含了许多函数,而且它能够完成许多早期需要用 JavaScript才能完成的事情。每年都有新的特性被添加进来,这让我们的开发更加轻松,也减少了对JavaScript的依赖。CSS 函数是它所具有的最强大的特性之一,在本文中,我将介绍一些我认为有用的函数。 (学习视频分享:css视频教程) a…

    2025年12月24日 好文分享
    000
  • CSS元素选择器的运作原理介绍

    推荐教程:CSS视频教程 在前端工程师的日常工作中,使用 CSS 元素选择器是稀松平常的事;无论你是编写一般的 CSS 还是需要经过编译的 SASS,SCSS,LESS等,最终都被编译成一行一行的 CSS 样式属性,最终交给浏览器解析并套用。但是你想过没有这是如何实现的呢? 浏览器渲染 我们先看一下…

    2025年12月24日 好文分享
    000
  • 清除浮动和闭合浮动的介绍

    本篇文章给大家带来的内容是关于清除浮动和闭合浮动的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 为什么要清除浮动 子元素 float:left; 脱离文档流,会造成父元素塌陷(撑不起来) 父元素 靠子元素撑起来 清除浮动  clear:both 清除浮动 // 伪元素 :af…

    好文分享 2025年12月24日
    000
  • 选择器(picker)插件的实现方法介绍(代码)

    本篇文章给大家带来的内容是关于选择器(picker)插件的实现方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一个正常的选择器插件是非常细致的,一步一步来描述就是。手指滑动内容跟随手指滚动,当内容到底或触顶的时候就不能在滚动并且内容要一直保持在正确的位置上。 第一步…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信