前言
之前,在LeetCode上刷到一个字符串的题目,需要将其中的英文字符取出来,去除其他字符。原本按照我正常的思路,这个题目还有一点难度!最后发现,通过replace
方法加上正则表达式就能轻轻松松解决问题!
所以今天!我们就来浅聊一下正则表达式!
正文
什么是正则表达式?
正则表达式(Regular Expression)是一种用于匹配字符串模式的工具。在JavaScript中,正则表达式被表示为字符串,而用来创建和操作它们的函数则被定义在JavaScript的RegExp对象中。
以下是一些基本的正则表达式概念和示例:
- 元字符 :这些字符具有特殊含义,如
.
(匹配任何字符),*
(匹配前一个字符0次或多次),+
(匹配前一个字符1次或多次),?
(匹配前一个字符0次或1次),^
(匹配字符串的开始),$
(匹配字符串的结束),[abc]
(匹配方括号内的任何字符)等。 - 字符类:你可以使用方括号来定义字符类。例如,[abc]将匹配任何一个'a'、'b'或'c'字符。
- 选择、分组和引用 :你可以使用
|
来选择,使用括号来分组,使用\number
来引用前面的子表达式。例如,(a|b)匹配'a'或'b',(ab)c匹配"ab"c,而(a|b)c则匹配"ac"或"bc"。 - 预定义模式:你可以使用预定义模式来匹配一些常见的字符串模式。例如,\d匹配任何数字,\w匹配任何字母或数字或下划线,\s匹配任何空白字符。
- 边界:你可以使用边界来指定字符串的位置。例如,^匹配字符串的开始,$匹配字符串的结束。
- 贪婪量词和非贪婪量词 :在JavaScript中,量词默认是贪婪的,但你可以使用问号(
?
)来改变这个行为。例如*,?将匹配尽可能少的重复字符,+?也是一样。 - 反向引用 :你可以使用
\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
,该表达式匹配任何不包括在a
到b
之间的字符 。[^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]/g
对 str
字符串执行 exec
方法的结果。
正则表达式 /[a-z]/g
的含义是匹配任何一个小写字母(从 a
到 z
),并且 g
标志表示全局搜索,即查找整个字符串中的所有匹配项,而不仅仅是第一个。
exec
方法返回一个数组,其中包含第一个匹配项,或者如果没有找到匹配项则为 null
。这个数组还包含一个名为 index
的属性,表示匹配项在字符串中的位置。
所以,如果 str
是 'a12b4cou'
,那么 result
将是一个数组,其中包含元素 'a'
,并且 index
是 0
字符串.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()返回下标
最后
正则表达式在字符串处理中有着广泛的应用,它能帮助我们以特定的模式匹配、查找或者替换字符串中的子串。接下来是一些常见的正则表达式应用与方法:
- 模式匹配 :这是正则表达式最基本的应用。例如,我们可以使用正则表达式
a[0-9]+b
来匹配所有以字母'a'开始,以'b'结束,中间由一个或多个数字组成的字符串。 - 查找符合特定模式的子串 :我们可以使用
RegExp.prototype.exec()
方法来查找符合特定模式的子串。如var regex = /a[0-9]+b/; var str = 'abc123bdef456b'; var result = regex.exec(str);
这段代码会返回'123b'
,即第一个符合模式的子串。 - 替换符合特定模式的子串 :我们可以使用
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'. - 分割字符串 :我们可以使用
RegExp.prototype.split()
方法来根据特定的模式分割字符串。如var str = 'a1b2c3'; var result = str.split(/[1-9]/);
这段代码会返回['', 'a', 'b', 'c', '']
,即将字符串按照数字进行分割。 - 验证字符串 :我们可以使用正则表达式来验证字符串是否符合特定的格式。例如,我们可以使用
/^\d{3}-\d{2}-\d{4}$/
这个正则表达式来验证一个字符串是否是美国标准的日期格式(例如 '123-45-6789')。
我们今天主要介绍了五种正则表达式配上方法在字符串中应用!!
如果你有任何建议或者指正,欢迎评论留言!!点个小赞鼓励支持一下吧!🌹🌹🌹