百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

手把手带你傻瓜式理解正则表达式(1)

toyiye 2024-08-22 23:09 6 浏览 0 评论

今天在coding的时候,看到师傅写了这样一串的代码:

if (/^([a-f0-9A-F]{2}:){5}[a-f0-9A-F]{2}$/.test(val)) {
 this.tempdata.name = val.toLowerCase()
 }

我对这里的.test语法不太理解,然后就有了这一篇文章:

上面的代码主要有两个知识点了,一个就是if判断,另一个就是正则表达式匹配的操作。

正则表达式,英文为regular expression。先说说书上给的定义:

正则表达式是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用来按照“给定模式”匹配文本。

由于我这人阅读理解能力稍微差点,于是总喜欢把这些话进行拆分,然后进行理解。

下面举个例子吧,以下就是一个验证IP地址的一个正则表达式:

/^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/

当然,我现在的水平也看不懂这个到死是啥,但是,我知道IP地址一般是这样的形式:如192.168.1.1,这样四个0到255的数字和中间三个小数点组成的。

然后我们把这两个内容进行对照,我们看到,长长的正则表达式里也有一个小数点,我依稀觉得这两个之间绝对是有对应关系的。

于是,回到概念吧,我们发现这个ip地址虽然是由几个数字和小数点组成的,但是它最终写成的还是一个字符串。也就是一些由数字组合起来的文本了。

我是不是可以理解为那个长长的正则表达式应该就是约束实际内容的东西呢?

于是,概念中的给定模式,就是那一串长长的由括号数字等组成的一长串代码吧。

说实话,根据我现在的水平,我是觉得能把上面的正则表达式根据实际的需求写出来还是挺难的。

我就想,按我就先会用吧,毕竟网上现成的正则还挺多的。直接拿来用就好了,原谅我懒。。。

下面说说,正则表达式的新建吧!

和对象的新建相似,新建正则表达式有两种方法。

一种是使用字面量,以斜杠表示开始和结束。

var a = /xyz/;

另一种就是利用RegExp()构造函数来创建RegExp对象,

var a =new RegExp("xyz")

突然感觉两个有点不大对劲。。。

上一篇文章,我使用new操作符和Object创建对象。

var a = new Object();
a.name = "sudoudou";

之后提到的,

var obj1 = new Object();
var obj2 = new Array();
var obj3 = new Date();
var obj4 = new RegExp("ys");

为什么var a =new RegExp("xyz")是构造函数,也没见写function代码呀,它不应该是构造函数呀。。。

这几段代码,我好像忽略了,这几个是系统内置的对象。

这里这样写的话,认为是既然已经可以用new关键字了,我们就直接认为这个内置好的对象,已经写过构造函数了。

姑且先这样理解吧,万一错了,之后再改吧,现在就记得这两种定义方式吧!

再强调一次

var a = /xyz/;
var b = new RegExp("xyz")

一般来说,我们基本上都采用字面量定义正则表达式。

可是我们为什么要用正则表达式呢?

  1. 测试字符串内模式,比如测试电话号码是否符合规则可以成为数据验证,
  2. 替换文本,可以使用正则表达式识别文档中的特定文本,完全删除或者使用其他文本替换它。
  3. 基于模式匹配从字符串中提取字符串。

看完内容,我发现最上方的代码正好是解决第二条功能的。如果是mac地址形式的内容,就把全部内容转小写。

RegExp构造函数还可以接受第二个参数,表示修饰符

var regex = new RegExp('xyz', 'i');
// 等价于
var regex = /xyz/i;

常用的几个修饰符

i 不区分(ignore)大小写;

例如: /abc/i 可以匹配 abc、aBC、Abc

g 全局(global)匹配

如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回

如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置

m 多(more)行匹配

若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配,

因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,

g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始

var str = "abcggab\nabcoab";
var preg1 = /^abc/gm; str.match(preg1) // 结果为:["abc", "abc"]
var preg2 = /ab$/gm; str.match(preg2) // 结果为:["ab", "ab"]

先写到这里,待续。。。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码