文档章节

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

JandenMa
 JandenMa
发布于 06/16 18:11
字数 1401
阅读 17
收藏 2

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)

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

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

© 著作权归作者所有

共有 人打赏支持
JandenMa
粉丝 12
博文 28
码字总数 27794
作品 0
汕头
JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa
06/19
0
0
简单说 正则表达式——要注意lastIndex属性

说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ignoreCase、multiline、lastIndex。 source:是一个只读的字符串,包含...

FEWY
2017/07/10
0
0
JavaScript学习记录day9-标准对象

JavaScript学习记录day9-标准对象 [TOC] 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用操作符获取对象的类型,它总是返回一个字符...

ygqygq2
06/11
0
0
JavaScript的简单复习

JavaScript的简单复习 JS的两种加载方式: 1.内部加载 内部加载,写在<script>标签内部 2.外部加载 写在<script>的src目录中,使用外部加载js文件的时候,js解析引擎不解析script标签体中的代码...

Lunqi
2015/08/07
0
0
前端要以正确的姿势学习编译原理(上篇)

前端要以正确的姿势学习编译原理(上篇) 发布于 02:05 文章被以下专栏收录

brambles
05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解析高可用分布式键值存储 etcd 的原理

这篇文章将会介绍 etcd 的实现原理,其中包括 Raft 协议、存储两大模块,在最后我们也会简单介绍 etcd 一些具体应用场景。 etcd 的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整...

小刀爱编程
19分钟前
1
0
在ubuntun虚拟机里安装goLang语言编程环境

Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 北京时间201...

JerryWang_SAP
20分钟前
5
0
c++builder导出函数export function DLL

__stdcall __export 即可,如: ulong __stdcall __export od_disasm(char *src,ulong srcsize,ulong srcip, t_disasm *disasm,int disasmmode){ return Disasm(src,srcsiz......

simpower
21分钟前
2
0
KDC服务安装及配置

阿伦哥-
24分钟前
1
0
mybatis-plus公共字段操作以及springboot2整合mybatis-plus

1、公共实体 对于User类中有而user表中没有的属性需要加第二个注解@TableField(exist = false),表示排除User类中的属性 所有新增公共字段加注解 并指定 @TableField(value = "corp_code",fi...

glen_xu
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部