文档章节

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

JandenMa
 JandenMa
发布于 06/16 18:11
字数 1401
阅读 15
收藏 1
点赞 0
评论 0

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
粉丝 8
博文 21
码字总数 19977
作品 0
汕头
JavaScript零基础入门——(八)JavaScript的数组

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

JandenMa
06/19
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
JavaScript学习记录day9-标准对象

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

ygqygq2
06/11
0
0
JavaScript零基础入门——(十三)JavaScript的事件

JavaScript零基础入门——(十三)JavaScript的事件 大家好,欢迎回到我们的JavaScript零基础入门。上一节课,我们了解了JavaScript定时器,也演示了一些比较经典的例子,其实我们已经用到了...

JandenMa
07/01
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
前天
0
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa
06/25
0
0
Java魔法堂:深入正则表达式API

目录                               一、前言 二、正则表达式的使用诉求 三、java.util.regex包 四、java.lang.String实例 五、最短路径实现诉求 六、Java支...

fsjohnhuang
2014/11/16
0
0
精通 JavaScript中的正则表达式

相关文章: JS正则表达式详解[收藏] Javascript正则表达式笔记 javascript基础知识大集锦(2) JavaScript精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式。例如,可...

闵开慧
2013/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

003. es6数值的扩展

一、普通扩展 Number 方法,将字符串、数值转为十进制 : Number('0b111') Number.isFinite() 用来检查一个数值是否为有限的:Number.isFinite(15) Number.isNan() 用来检查一个值是否为NaN N...

秋季长青
15分钟前
0
0
rabbitmq学习(二)

基本队列:Producer直接发送信息到Queue中,Consumer接收Queue发送过来的信息 简而言之,一个生产者发送信息,一个消费者接收信息。 获取连接工具类: package com.example.demo.utils;i...

人觉非常君
20分钟前
0
0
C语言数组和指针的语法糖

对于C语言,我可以这样秀:比如当创建一个数组arr[n]之后,一般我们去遍历数组的时候是for (int i = 0; i < n; i++) { a[i]; }但是我知道下表访问符[]是个语法糖,也就是说a[i]在编译器看来是...

ustbgaofan
23分钟前
0
0
Call to undefined function bcmath()的解决方法

乐意黎的ECS主机环境,Centos7.2 + PHP7 由于使用了bcdiv()函数,运行时总在抛错。 Fatal error: Call to undefined function bcmath() in /usr/loca/apache/htdocs/... on line 4 一查得知:......

dragon_tech
29分钟前
0
0
css优先级

..

architect刘源源
34分钟前
0
0
【转】Twitter的分布式自增ID算法snowflake

结构 snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以...

talen
38分钟前
0
0
hive支持行级修改

Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置。要想支持行级insert、update、delete,需要配置Hive支持事务。 一、Hive具有ACID语义事务的使用场景 1. 流式...

hblt-j
43分钟前
0
0
Python---scrapy框架的学习

scrapy框架的学习 先熟悉下scrapy项目结构: scrapyTest/scrapyTest/ _init_.py用来初始化项目信息 scrapyTest/scrapyTest/ items.py文件为爬虫项目的数据容器文件,主要用来定义我们的数据....

android-key
52分钟前
1
0
MyBatis-映射文件标签(select、resultMap)

MyBatis 真正的核心在映射文件中。比直接使用 JDBC 节省95%的代码。而且将 SQL 语句独立在 Java 代码之外,可以进行更为细致的 SQL 优化。 一、 映射文件的顶级元素 select:映射查询语句 in...

小致dad
56分钟前
0
0
深入学习Java虚拟机——虚拟机内存区域与内存溢出异常

1. 运行时数据区域 1.1 程序计数器 1. 程序计数器是一段较小的内存空间,可以看作为当前线程所执行字节码的行号指示器。通过改变这个计数器的值来选取下一条字节码指令,分支、循环、跳转、异...

江左煤郎
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部