JavaScript零基础入门——(七)当字符串遇上正则表达式

JavaScript零基础入门——(七)当字符串遇上正则表达式

欢迎大家回到我们的JavaScript零基础入门,上一节课,我们学习了几种常用的字符串处理的方法,但上节课我们也说了,原生的字符串处理方法要有正则表达式的加持,才能发挥更大的威力。那么这节课,我们来学习一下正则表达式。

还是那个好习惯,什么是正则表达式?正则表达式,其实是舶来语,英文叫Regular Expression,简写为RegExp。其实从英文上可以看出来,直译叫规则表达式(台湾地区就是这么叫的),它是一种规则,用来规范或限制字符串的格式或内容,它是一种强大的字符串匹配工具,不过,也是一种正常人很难读懂的文字。

在JS中,正则表达式有两种写法,一种是JS风格,一种是Perl风格,前者通过创建RegExp对象来实现,后者则是直接通过Perl语法来简写,我们来看一下代码:

//正则表达式

//JS风格
// new RegExp(expression[,option])
var re1 = new RegExp('a');
var re2 = new RegExp('a','i');

//Perl风格
// /expression/[option]
var re3 = /a/;
var re4 = /a/i;

既然是表达式,那就有他特定的表达方法,一般来说,最常用的是[],方括号里边可以写取值范围,当字符串满足方括号中其中一个条件即可,同时,我们也可以借助正则对象的test方法来验证,不过需要注意的是,test只要有部分符合要求,就会返回true。我们来看一下代码:

var re = /[abc]/;

var str = 'access';

console.log(re.test(str));//true

re = /[0-9]/;

str = 'No1';

console.log(re.test(str));//true

re = /[0-9a-z]/;

str = 'No1';

console.log(re.test(str));//true

其实我们经常有一种需求,那就是排除部分不满足条件的,有点像我们曾经说过的取反,那要怎么实现呢?你能想得到,正则表达式的开发者也能想得到,在方括号中,加入^就可能取得条件的补集了,我们来看一下代码:

var re = /[^a-z]/;

var str = 'access';

console.log(re.test(str));//false

re = /[^0-9]/;

str = '123';

console.log(re.test(str));//false

re = /[^0-9a-z]/;

str = 'No1';

console.log(re.test(str));//true

有人会问,最后一个为什么是true而不是false呢?其实原因很简单,因为我们写的是a-z,但字符串中包含了大写字母N,所以是true。那么问题来了,我要忽略大小写怎么办?当然你可以在写一个A-Z,有同学嫌麻烦,没事,还记得上边我们说过,正则表达式是有option的吗?我们好像还没有用过呢,别急,我们来讲一讲。

option,主要是用来作为辅助条件,简单来说,助攻一把。常用的option呢,其实只有两个,一个是i,一个是g。i,就是ignore的缩写,表示忽略大小写;g是global的缩写,表示全局匹配。全局匹配我们下面再说,我们来先来了解一下ignore,看代码:

var re = /[^a-z]/i;

var str = 'Access';

console.log(re.test(str));//false

re = /[^0-9a-z]/i;

str = 'No1';

console.log(re.test(str));//false

这时候又有同学会说了,老师,每次老写这么长的表达式,好麻烦。不慌,正则表达式支持简写。正则表达式的简写,主要是借助转义字符,我们来认识一下:

转义字符释义
.(点)任意字符
\d任意数字,等价于{0-9]
\w任意英文、数字或下划线,等价于{a-z0-9_]
\s空白字符,如空格、tab等
\D非数字,等价于[^0-9]
\W除了英文、数字或下划线,等价于{^a-z0-9_]
\S非空字符

有些心细的同学可能会说,老师,如果我想输入3个数字两个字母要怎么办?没事,正则表达式提供了量词。什么是正则表达式的量词?它是用来描述匹配出现的次数,常用的量词有哪些呢?我们来看一下:

表达式释义
{n}正好n次
{n,}至少n次
{n,m}最少n次,最多m次
*任意次,相当于{0,}
+一次或更多,相当于[1,}
?零次或一次,相当于{0,1}

说了这么多,有同学说,老师,看不出对字符串处理发挥什么作用?好吧,那我们就来说一说。

首先,我们上节课说过,search可以返回指定字符出现的位置,但是我们想要的可能是判断有无包含字母或数字之类的,但字母又区分大小写,该怎么办?来看代码:

var str = 'aBc';

console.log(str.search(/a/));//0
console.log(str.search(/b/));//-1
console.log(str.search(/b/i));//1

上一节课我们还讲过replace可以替换找到第一次的文本,但是如果我想批量替换怎么办?继续看代码:

var str = 'aBcaacc';
str=str.replace(/a/,'h');
console.log(str);//hBcaacc
str=str.replace(/c/g,'z');
console.log(str);//hBzaazz

好,这节课我们的主要内容已经讲完了,更多好玩的例子请观看公众号的视频。不过,看归看,还是要自己敲一敲的哈。好了,下一节课,我们接着讲JavaScript的数组。

                                                                                                       

如果想跟着振丹继续学习,可以微信关注【振丹敲代码】(微信号:JandenCoding)

新博文微信同步推送,还附有讲解视频哦~

也可直接扫描下方二维码关注。

转载于:https://my.oschina.net/JandenMa/blog/1831348

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值