最近在使用正则匹配的时候,我遇到一个非常有意思的现象,代码如下所示:
const reg = /\.jpg/g;
const arr = [
'test1.jpg',
'test2.jpg',
'test3.jpg',
'test4.jpg',
'test5.jpg',
];
arr.map(item => console.log(reg.test(item)));
这段代码很好理解:它的规则就是判断字符串中是否含有.jpg,然后再循环地和数组中的字符串进行匹配,打印出结果。
很显然这非常之简单嘛,输出的结果当然是全为true啦~
然而,图样图森破,它的结果是这样的:
代码的执行结果非常神奇:它并没有全部打印true,而是交替打印true和false值,这到底是为什么?
为了查清楚到底是怎么回事,我开始上网搜索相关资料,经过一番搜索后,发现正则并没有我们想象的那么简单...
首先正则有一个属性叫lastIndex,它表示正则下一次匹配时的起始位置。一般情况下我们是使用不到它的,但在正则中包含全局标志g时,正则的test和exec方法就会使用到它,具体规则如下:
为验证这个结论,我特意做了两个实验:
第一个就是直接将正则的lastIndex打印出来:
const reg = /\.jpg/g;
const arr = [
'test1.jpg',
'test2.jpg',
'test3.jpg',
'test4.jpg',
'test5.jpg',
];
arr.map(item => console.log(reg.test(item), reg.lastIndex));
第二个就对数组中的字符串稍作修改:
const reg = /\.jpg/g; const arr = [ 'test1.jpg', 'longTest4.jpg', 'test3.jpg', 'longTest4.jpg', 'test5.jpg', ]; arr.map(item => console.log(reg.test(item), reg.lastIndex));
通过两组实验的对比观察,发现确实如此:
在第一个实验中,由于数组中字符串的长度都是一致的,成功匹配后lastIndex的值直接更新为9,下次匹配的时候直接从第10个字符开始(很明显根本就没第10个字符嘛),因此匹配失败,lastIndex重置为0。以此类推,最终以9、0、9的形式交替打印。
而第二个实验由于我们增加了部分字符串的长度,因此对于第2、4个字符串而言,即使从第9个字符开始匹配,依然能匹配到后边的.jpg,故lastIndex继续更新到13
通过这次小小的实验,我们发现使用正则的时候还是要多加小心,对于test和exec方法,最好还是不要随意加上全局标志g。
来源:https://segmentfault.com/a/1190000016361529
统一代码为18位,统一代码由十八位的数字或大写英文字母(不适用I、O、Z、S、V)组成,由五个部分组成:第一部分(第1位)为登记管理部门代码,9表示工商部门;(数字或大写英文字母)
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,$匹配输入字符串的结束位置
正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法
/正则表达式/修饰符/i (忽略大小写),/g (全文查找出现的所有匹配字符),/m (多行查找),/gi(全文查找、忽略大小写),/ig(全文查找、忽略大小写),不写修饰符默认只匹配一个
本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。并分别给出了两个方案的解析和测试程序。一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定。
正则表达式已经成为程序员的必备工具。几乎所有流行的编程语言都支持正则表达式,原因如下:正则表达式为开发人员提供了强有力的工具,使之能快速执行需要几十行代码才能完成的任务。本文主要研究前端开发人员经常要面对的六大文本处理和操作任务
正则表达式(regex)是定义搜索模式的字符序列。由于对程序员的日常工作非常有用,所以在 JavaScript 中也支持它。在这个系列文章中,我会向你展示其工作方式以及其实际用途
为了方便,最终代码选择在node环境中执行,因为最初的需求是将html中的所有注释去掉,所以我们使用了字符串的replace方法,该方法接收两个参数,第一个参数是正则表达式,第二个参数是需要替换成的内容。
正则表达式一直是困扰很多程序员的一门技术,当然也包括曾经的我。大多数时候我们在开发过程中要用到某些正则表达式的时候,都会打开谷歌或百度直接搜索然后拷贝粘贴。
最近在看vue的模板解析成render这一块,顺便补一下正则的知识。attribute这段正则很长,他的主要作用是匹配标签里的指令,可以分几个分组来解读
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!