(day 19)JavaScript学习笔记(正则表达式1之创建正则表达式、字符匹配、特殊字符匹配、匹配次数)

概述 

        这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。

        今天学习正则表达式,主要是创建正则表达式、字符匹配、特殊字符匹配、匹配次数等。

        在JavaScript中,正则表达式(Regular Expression)是一种强大的工具,用于处理文本数据。它可以帮助我们进行字符串的匹配、查找、替换等操作,特别适用于那些需要按照某种规则或模式处理文本的场景。

        在JavaScript中,正则表达式通常以斜杠(/)开始和结束,中间是正则表达式的模式。例如,/abc/ 就表示一个匹配字符串 "abc" 的正则表达式。

        除了基本的匹配,JavaScript的正则表达式还支持各种元字符和特殊序列,用于匹配更复杂的模式。例如,\d 可以匹配任意数字,\w 可以匹配任意字母、数字或下划线,. 可以匹配任意字符(除了换行符),等等。

        此外,JavaScript的正则表达式还支持各种修饰符(flags),用于改变正则表达式的行为。常见的修饰符有:

g:全局搜索,表示搜索整个字符串,而不仅仅是找到第一个匹配项就停止。
i:不区分大小写,表示在匹配时忽略大小写。
m:多行搜索,表示将开始和结束字符(^ 和 $)视为在任何一行的开始和结束处,而不仅仅是整个字符串的开始和结束处。
        在JavaScript中,我们可以使用正则表达式的 test() 方法来检测一个字符串是否匹配某个模式,使用 match() 方法来获取所有匹配的子串,使用 search() 方法来获取匹配项的位置,以及使用 replace() 方法来替换匹配的子串。

1.创建正则表达式

        在JavaScript中创建正则表达式有两种形式,一种是用字面值,一种是用正则表达式RegExp创建,如下代码:        

var str = "where when what";
var re = /wh/; //用字面值创建
var re2 = new RegExp(/wh/); 

        上面代码中/wh/表示一个匹配字符串 "wh" 的正则表达式,我们可以使用正则表达式的 test() 方法来检测字符串str中是否包含wh,如下代码所示:        

console.log(re.test(str)); //输出:true
console.log(re2.test(str)); //输出:true

        在JavaScript中,正则表达对象有一个 exec() 方法,它用于对指定的字符串执行正则表达式搜索,并返回一个数组(如果匹配成功)或 null(如果匹配失败)。这个数组包含了匹配的结果以及任何括号捕获的内容,同时还包含了一些关于匹配的信息。如下代码所示:        

console.log(re.exec(str)); //输出:['wh', index: 0, input: 'where when what', groups: undefined]

         exec返回的是第一个匹配的结果,index是0,也就是说它匹配了where中的wh,后面的没有匹配。我们在正则表达式中添加修饰符g,它就会全局搜索,如下代码演示:

var str = "where when what";
var re = /wh/g; //用字面值创建
console.log(re.exec(str)); //['wh', index: 0, input: 'where when what', groups: undefined]
console.log(re.exec(str)); //['wh', index: 6, input: 'where when what', groups: undefined]
console.log(re.exec(str)); //['wh', index: 11, input: 'where when what', groups: undefined]
console.log(re.exec(str)); //null

        它会依次进行匹配,直至null。

2字符匹配

        最简单的正则表达式的语法就是直接匹配字符,在两个斜杠中间写要匹配的字符即可,如下代码演示:

var str = `This string cantains 123456 
CAPITALIZED letters and _-&% symbols`;

//判断是否包含大写字母T
console.log(/T/.test(str)); //返回:true

//判断是否包含This
console.log(/This/.test(str)); //返回:true

//判断是否包含Thiss
console.log(/Thiss/.test(str)); //返回:false

//判断是否包含12
console.log(/12/.test(str)); //返回:true

//判断是否包含12
console.log(/1234567/.test(str)); //返回:false

//判断是否包含特殊字符
console.log(/_-&/.test(str)); //返回:true

3.特殊字符匹配

        上面单纯的匹配字符只适用于提前知道要查找字符串的情况,如果要匹配一定的规则,需要用到一些特殊字符来表示。

        在正则表达式中,点(.)是一个元字符,代表任意字符。它可以匹配除了换行符(\n)之外的任意一个字符,包括字母、数字、标点符号或空格等。例如,正则表达式“a.b”可以匹配“acb”、“adb”、“a b”等。如下代码演示,我们用字符串match方法,它用于在一个字符串中查找与正则表达式匹配的子串,并返回一个包含所有匹配结果的数组。如果没有匹配结果,则返回null。    

var str = `This Thas string cantains 123456 
CAPITALIZED letters and _-&% symbols`;
//基础匹配
console.log(str.match(/Th.s/)); //输出:['This', index: 0, input: 'This Thas string cantains 123456 \nCAPITALIZED letters and _-&% symbols', groups: undefined]
//全局匹配
console.log(str.match(/Th.s/g)); //输出:(2) ['This', 'Thas']
console.log(str.match(/th.s/g)); //输出:null
console.log(str.match(/1.3/g)); //输出:['123']
console.log(str.match(/1.6/g)); //一个点只能匹配一个字符,所以输出:null

        在正则表达式中\d是一个元字符,用于匹配任意单个数字字符。\d代表一个数字的范围,从0到9。如下代码所示:        

console.log(str.match(/\d/g)); //输出:(6) ['1', '2', '3', '4', '5', '6']

        在正则表达式中,\w 是一个元字符,用于匹配任何单字字符,即相当于 [a-zA-Z0-9_]。这表示它可以匹配任何大小写字母、数字或下划线字符。如下代码所示:        

console.log(str.match(/\w/g));//输出:(57) ['T', 'h', 'i', 's', 'T', 'h', 'a', 's', 's', 't', 'r', 'i', 'n', 'g', 'c', 'a', 'n', 't', 'a', 'i', 'n', 's', '1', '2', '3', '4', '5', '6', 'C', 'A', 'P', 'I', 'T', 'A', 'L', 'I', 'Z', 'E', 'D', 'l', 'e', 't', 't', 'e', 'r', 's', 'a', 'n', 'd', '_', 's', 'y', 'm', 'b', 'o', 'l', 's']

        在正则表达式中,\s 是一个特殊的元字符,用于匹配任何空白字符。空白字符包括空格、制表符(Tab)、换行符(\n)、回车符(\r)、垂直制表符(\v)和换页符(\f)。如下代码所示:        

console.log(str.match(/\s/g)); //输出:(10) [' ', ' ', ' ', ' ', ' ', '\n', ' ', ' ', ' ', ' ']

        \d   \w  \s 中如果把字母改成大写,就是相反的,例如\D匹配的是非数字,如下代码所示:

var str3 = "This abc123 _-&%";
console.log(str3.match(/\D/g)); //输出:(13) ['T', 'h', 'i', 's', ' ', 'a', 'b', 'c', ' ', '_', '-', '&', '%']
console.log(str3.match(/\W/g)); //输出:(5) [' ', ' ', '-', '&', '%']
console.log(str3.match(/\S/g)); //输出:(14) ['T', 'h', 'i', 's', 'a', 'b', 'c', '1', '2', '3', '_', '-', '&', '%']

        如果 匹配中文字符,需要用中文字符的unicode码,如下代码示例:

console.log("你好".match(/\u4f60/g)); //输出:['你']

4.匹配次数 

在正则表达式中,匹配次数是通过特定的元字符和量词来控制的。这些元字符和量词允许你指定前面的字符或组应该出现的次数。以下是一些常见的匹配次数的元字符和量词:

*:匹配前面的字符0次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。

+:匹配前面的字符1次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。

?:匹配前面的字符0次或1次。例如,do(es)? 可以匹配 "do" 或 "does" 中的 "do"。

{n}:匹配前面的字符恰好n次。例如,o{2} 会匹配 "foo" 中的 "oo"。

{n,}:匹配前面的字符至少n次。例如,o{2,} 不会匹配 "fo" 中的 "o",但会匹配 "fooo" 中的所有 "o"。

{n,m}:匹配前面的字符至少n次,但不超过m次。例如,o{1,3} 将匹配 "foooo" 中的前三个 "o"。

如下代码所示:

var str2 = "bl bol bool boool booool";
console.log(str2.match(/bo*/g)); //输出:(5) ['b', 'bo', 'boo', 'booo', 'boooo']
console.log(str2.match(/bo+/g)); //输出:(4) ['bo', 'boo', 'booo', 'boooo']
console.log(str2.match(/bo?/g)); //输出:(5) ['b', 'bo', 'bo', 'bo', 'bo']
console.log(str2.match(/bo{2}/g)); //输出:(3) ['boo', 'boo', 'boo']
console.log(str2.match(/bo{2,}/g)); //输出:(3) ['boo', 'booo', 'boooo']
console.log(str2.match(/bo{2,3}/g)); //输出:(3) ['boo', 'booo', 'booo']

        以上便是今天的学习内容,如果对你有所帮助请点个赞再走吧。

  • 32
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值