【编程基础】正则表达式的学习---(Regular Expression)

1、简介

含义:正则表达式(Regular Expression),常简写为RegExr、RegExrp、RE等;

组成:普通字符(如a 到 z ,0到9)和元字符(如\ $ *)。

作用

  1. 匹配:检查给定的字符串是否符合正则表达式的过滤逻辑:
  2. 截取:从字符串中获取我们想要的部分字符。
  3. 替换: 将字符串中匹配到的子串进行替换;

本质:用以表示匹配规则的表达式(也称pattern);

特点:灵活性、逻辑性和功能性非常强,但初学比较晦涩难懂,那让我们开始啃吧;

在之前的编程学习或者电脑使用中,可能使用过 ? 和 *通配符来查找硬盘上的文件。? 通配符代表 0 个或 1 个字符,而 *通配符代表零个或多个字符。 其中就有那么一点正则表达式的意味了,通过字符来匹配需要的文件名(字符串),但正则表达式功能远比这强大;

2、语法

2.1正则表达式由什么组成?

从内容上看:正则表达式由普通字符元字符组成;

从形式上看:正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者组件的任意组合;

什么是普通字符?

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

什么是元字符?

元字符又叫特殊字符,是一些有特殊含义的字符,比如刚刚在上面所讲的*字符,在windows文件系统检索中代表了零个或多个字符;
但是,元字符本身要如何匹配呢?若要匹配这些元字符本身,必须首先使字符"转义",即,在元字符前面加反斜杠\ ;
在这里插入图片描述

限定符

没错,除了普通字符、元字符之外,还有一种特别的符号,叫限定符:
限定符用来指定正则表达式的一个给定组件必须要出现多少次,或一些特别的限定需求。
在这里插入图片描述

非打印字符

对,还还还有一种字符可以参与到正则表达式中,这些字符一般无法通过输入法显示出来,在计算机系统里面通过转义来表示;
这里可以联系Java里面的转义字符来理解;
在这里插入图片描述

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
在这里插入图片描述

2.2正则表达式如何使用?

这里的使用以JavaScript环境为例,
一是因为正则表达式主要学习表达式的使用方法,在不同语言中的出入较小,兼容性较好,大多数是通过一个函数来调用匹配;
二是因为JS中测试正则表达式十分方便,可以以现成的网页内容为目标进行匹配;

match()方法

JS中的字符串可以通过string.match(regexp)方法来检查字符串string是否符合正则表达式regexp的匹配规则;
在这里插入图片描述
例子:

var str = "runoob.com";
var patt = /[.]/;
str.match(patt);//返回长度为1的数组,内容为".";
test()方法

JS中的字符串也可以通过regexp.test(stinrg)方法来检查字符串string是否符合正则表达式regexp的匹配规则;

在这里插入图片描述

例子:

var patt = /e/;
patt.test("The best things in life are free!");//返回true;
2.3正则表达式的创建?

JS中创建正则表达式有两种方式:

①直接创建

在JS中,从上面的例子可以看出正则表达式就如同正常的数学表达式一样,在不需要"双引号"括起来;
只需要用反斜杠/表达式内容/;

②RegExp对象创建
var patt=new RegExp(pattern,modifiers);

pattern(模式) 描述了表达式的模式

modifiers(限定符) 用于指定全局匹配、区分大小写的匹配和多行匹配

2.4正则表达式的实例?

由易到难,由少到多,循序渐进;

1-普通字符的匹配
需求:检查字符串str是否含有字符e
var patt = /e/;
patt.test("The best things in life are free!");

var patt = /e/;
var str = "The best things in life are free!";
str.match(patt);//返回长度为1的字符串数组,内容为"e";

可以看到上面的字符串其实含有很多个e,但是只匹配到了一个e,那么如何检查字符串有多少个字符e呢?

需求:检查字符串str含有字符e的数量
var patt = /e/g; //全局匹配
var str = "The best things in life are free!";
str.match(patt);//返回长度为6的字符串数组,内容都为"e";

这里就可以看出限定符g的用法了,即:执行全局匹配,在目标字符串中进行匹配时如果发现了第一个匹配项,不会停止匹配(默认是会停止后续字符串的匹配的),而是继续匹配后续的字符串,检查是否还有符合条件的字符串;

需求:检查字符串并不区分大小写
var str = "Hello World";
var patt = /world/;
str.match(patt);//这里返回值为null,即没有匹配的字符串;
var str = "Hello World";
var patt = /world/i;
str.match(patt);//这里返回值为包含"World"字符串的数组,说明匹配成功!

从上述两例可以看出限定符i的用法,加上i代表不区分大小写,默认是区分大小写的;

需求:匹配1-9开头的任意长度数字

这里使用在线正则表达式测试工具:
上方为正则表达式,省略了//;
下方着色的即为匹配结果,可以发现以0开头的最后两个数没有匹配到前部分;
注意:(黄色和蓝色都是匹配结果,不同颜色只是为了区分显示不同匹配项);
在这里插入图片描述

需求:匹配 1~99 的正整数

这里可以看到我们使用了[]代表范围,{}代表匹配次数,{}只对它前面的表达式起作用,即[1-9][0-9]{0,1}中其实包括了两个子表达式,①[1-9]②[0-9]{0,1};
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值