大家好,今天小编来为大家解答js 正则表达式这个问题,js正则表达式匹配指定字符串很多人还不知道,现在让我们一起来看看吧!
JavaScript作为前端开发中最常用的语言之一,其正则表达式的强大功能无疑为开发者带来了极大的便利。正则表达式在字符串匹配、文本处理、数据验证等方面都有着广泛的应用。今天我们就来深入探讨一下JavaScript中的正则表达式,一起解锁它背后的强大力量!
一、什么是正则表达式?
正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具。它可以描述字符串的某种模式,以便在文本中快速查找、替换或提取特定的字符串。简单来说,正则表达式就是一套用于匹配字符串的规则。
二、正则表达式的应用场景
1. 字符串匹配:判断一个字符串是否符合特定的模式。
2. 文本搜索:在长文本中快速定位到包含特定模式的字符串。
3. 文本替换:将文本中符合特定模式的字符串替换成另一种字符串。
4. 数据验证:对用户输入的数据进行有效性校验。
5. 数据提取:从文本中提取出特定模式的数据。
三、正则表达式的基本语法
1. 元字符:元字符具有特殊意义,用于描述更复杂的匹配模式。
| 元字符 | 作用 |
|---|---|
| “”d | 匹配数字 |
| “”w | 匹配字母、数字、下划线 |
| “”s | 匹配空白字符 |
| “”D | 匹配非数字 |
| “”W | 匹配非字母、数字、下划线 |
| “”S | 匹配非空白字符 |
| . | 匹配除换行符以外的任意单个字符 |
2. 量词:量词用于指定匹配的次数。
| 量词 | 作用 |
|---|---|
| * | 0次或多次 |
| + | 1次或多次 |
| ? | 0次或1次 |
| {n} | n次 |
| {n,} | 至少n次 |
| {n,m} | n到m次 |
3. 分组和捕获:使用括号对正则表达式中的部分进行分组,可以捕获匹配的字符串。
4. 选择和优先级:使用竖线“|”表示或操作,可以使用括号改变匹配的优先级。
四、正则表达式示例
| 示例 | 作用 |
|---|---|
| /^””d{4}-“”d{2}-“”d{2}$/ | 匹配形如“2020-01-01”的日期格式 |
| “”w+@qq””.com | 匹配以“@qq.com”的邮箱地址 |
| “”d{6} | 匹配6位数字 |
| (“”d{3})””d{4}(“”d{4}) | 匹配形如“123-4567-8901”的身份证号码 |
五、正则表达式进阶技巧
1. 正向预查和反向预查:用于匹配满足某个条件的字符串,但不需要包含匹配的结果。
2. 贪婪匹配和非贪婪匹配:贪婪匹配会尽可能多地匹配,而非贪婪匹配会尽可能少地匹配。
3. Unicode属性类:匹配具有特定Unicode属性的字符。
4. 正则表达式的嵌套和递归:使用嵌套和递归构造复杂的匹配模式。
正则表达式在JavaScript中的应用非常广泛,熟练掌握正则表达式能够帮助我们更加高效地处理字符串。本文介绍了正则表达式的基本语法、应用场景和进阶技巧,希望能帮助读者更好地掌握这门强大的工具。在接下来的工作中,让我们一起发挥正则表达式的威力,为前端开发添砖加瓦吧!
js 正则表达式是什么
在JavaScript中,正则表达式通常用于两个字符串方法:search()和replace()。
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
正则表达式的特点是:
1、灵活性、逻辑性和功能性非常强;
2、可以迅速地用极简单的方式达到字符串的复杂控制。
3、对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
js中的正则表达式(2)
紧接着上次的 js中的正则表达式(1),这一文搁在那很久了的,本文为初学者学习笔记心得,适用我这种小白,并不是什么高大尚的内容,您将在本文中看到,如何实现重复字符匹配,子表达式的使用,嵌套以及replace()方法中圆括号内第二个特殊参数的使用,欢迎路过的老师多提意见和指正
可以戳后链接 js中的正则表达式(2)
示例1:
示例2:
示例3:
示例1:
+与*的区别:
+:匹配的是一个或者多个字符(或字符集合),也就是最少要匹配一次,至少有一个或者多个匹配,而*:匹配零个或者任意多个字符(或者字符集合),可以没有匹配
比如下面的两个实例应用区别:电子邮件的匹配规则
示例2:
示例3:
示例1:
小结:问题:
示例1:匹配重复多个字符/x{n}/
示例2:为重复匹配次数设定一个区间/x{m,n}/匹配x字符最少m次,最多n次
示例3:重复匹配0次到n次/x{0,n}/,匹配字符x,0次..n次
示例4:匹配至少重复多少次:给出一个最小的重复次数,不必给出一个最大值/{n,}/至少重复n次,或者必须重复n次或者更多次
贪婪型元字符:*,+,{n,}
懒惰型元字符:*?,+?,{n,}?
概念:对表达式进行分组和归类,也是更大的表达式的一部分,把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当做一个独立元素来使用
方式:子表达式必须用(和)括起来,注意,(左括号和右括号)是元字符,如果想要匹配本身,注意转义(和)
示例1:
子表达式是允许多层嵌套的,没有限制,但是要适可而止,多重的嵌套子表达式可以构造出强大的正则表达式,但是由于层层嵌套,会让正则表达式难以阅读和理解,但硬骨头始终是要啃的,如果进行表达式的拆分,每次只分析和理解一个子表达式,按照先内后外的原则来进行拆分,而不是从第一个字符开始一个字符一个字符的去尝试,也许就会好很多
示例1:匹配一个合法的IP地止
这个模式相当的长而且看着非常繁琐而复杂,是由众多个子表单时嵌套构成,4个子表达式
((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])),从左边到右边,(\d{1,2})表示匹配任意一个1位或者两位数字(0-99),(1\d{2})表示的是一个以1开头的任意三位数(也就是100-199),(2[0-4]\d)表示匹配整数200-249,(25[0-5])表示的是匹配整数250-255,上面的长表达式通过|操作符结合成为一个更大的子表达式,其中含义是只需匹配4个子表达式中的任意一个就可以,而后面的 \.用来匹配元字符.本身,而后面的{3}表示需要重复3次,直到最后,数值范围又重复了一次,此次过程省略了 \.用来匹配IP地止里的最后一组数字,通过把4组数字的取值范围限制在0~255之间,这个模式就做到了只匹配合法的IP地止,不匹配非法的Ip地止
小结:
子表达式非常强大,也非常灵活,它是把同一个表达式的各个相关的部分组合在一起从而构成强大的匹配模式,子表达式必须用(右括号和左括号)来定义,并且子表达式可以多层嵌套使用
用途:对重复次数元字符的作用对象做出精准的设定和控制,对|操作符的OR条件做出准确的定义等
对于replace(正则规则,要替换的文本或者功能函数)方法中的第二个参数可以用函数的方式传入,而不只是一个字符串值,在这种情况下,原始字符串中每出现一项匹配的子字符串,都会执行一次该函数,并传入所匹配的子字符串,会使用函数的返回值来替换原子字符:
例如
总结:
整篇文章主要是对上节的一个补充,正则的内容太长了,容易令人看到想吐,主要谈到利用 x+进行重复匹配,也就是元字符加(+)的使用,以及用*匹配零个或多个字符,?:匹配零个或一个字符,只能匹配一个字符,对他们三者做了一个简单的比较,子表达式的使用,嵌套,replace()方法中第二个参数特殊字符的使用,以及作为函数时使用,而在平时当中,第二个参数作为函数处理是很常见的,当然正则是非常强大,远不止这点皮毛,反正我个人觉得,还是挺复杂的,往往通过正则写起来复杂的,用面向过程写法,逻辑更为复杂的,工具用好了,就是神器
JS的正则表达式如何使用
这次给大家带来JS的正则表达式如何使用,使用JS正则表达式的注意事项有哪些,下面就是实战案例,一起来看一下。
学好正则表达式很重要,下面是一些关于正则表达式的基本知识整理
\:转义字符
^:匹配字符串开始位置
$:匹配字符串结束位置
*:匹配前面的表达式任意次
+:匹配前面的表达式一次或多次
?:匹配前面的表达式零次或一次
{n}:匹配确定的n次,n为非负整数
{n,}:匹配至少n次,n为非负整数
{n,m}:匹配至少n次,至多m次,n和m均为非负整数且n<=m
(*,+,{n,m})?:非贪婪匹配模式,尽可能少的匹配,例如“z+”可以匹配“zzzzz”,“z+?”只匹配到“z”
.:匹配除
外任何单个字符
(pattern):匹配pattern,并获取匹配,可以获取匹配到的结果,用\1-\9表示,例如“(o)”匹配到“o”,“(o)\1”匹配到“oo”,“(\d{3})\1”匹配到“123123”,不能匹配到“123456”
(?:pattern):非获取匹配,匹配pattern,但不获取匹配结果
(?=pattern):非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用,例如“test(?=123)”能匹配“test123”中的“test”,但不能匹配“test456”中的“test”
(?!pattern):非获取匹配,正向否定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用,例如“test(?=123)”能匹配“test456”中的“test”,但不能匹配“test123”中的“test”
(?<=pattern):非获取匹配,反向肯定预查,和正向肯定预查类似,方向相反,例如“(?<=123)test”能匹配“123test”中的“test”,但不能匹配“456test”中的“test”
(?<!pattern):非获取匹配,反向否定预查,和正向否定预查类似,方向相反,例如“(?<!123)test”能匹配“456test”中的“test”,但不能匹配“123test”中的“test”
x|y:匹配x或y
[xyz]:匹配包含的任意一个字符
[^xyz]:匹配未包含的任意字符
\b:匹配一个单词边界,例如“on\b”能匹配“location”中的“on”,不能匹配到“component”中的“on”
\B:匹配非单词边界,例如“on\B”能匹配到“component”中的“on”,不能匹配到“location”中的“on”
\d:匹配一个数字字符
\D:匹配非数字字符
\s:匹配任何不可见字符,相当于[\f
\t\v]
\S:匹配任何可见符,相当于[^\f
\t\v]
学好正则不仅可以帮助我们减少代码量,还能解决很多复杂的需求,所以先打好基础才能向高阶攀爬
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
Javascript的单例模式
flex布局详解
Javascript的观察者模式
Javascript的代理模式
关于js 正则表达式和js正则表达式匹配指定字符串的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。




