摘要:第二阶段该部分内容是学习正则的第二篇内容,点击第一部分查看第一部分的内容。
第二阶段
该部分内容是学习正则的第二篇内容,点击第一部分查看第一部分的内容。
这部分学习的内容包括:
分组
断言
匹配模式(贪婪和懒惰)
分组我们可以通过量词匹配一个字符多次,但是如果我们想要匹配多个字符多次,就需要用到分组,比如下面一个例子
// 匹配字母和数字连续出现三次的字符 let str = "a1b2c3d4"; let reg = /([a-z]d){3}/ str.replace(reg,"x"); // 通过分组重新排列字符 let str = "2019-09-10"; let reg = /^(d{4})-(d{2})-(d{2})/ str.replace(reg,"$2/$3/$1") // result "09/10/2019" // 匹配IP v4 的地址 let reg = /^((2[0-4]d|25[0-5]|[0-1]?dd?).){3}2[0-4]d|25[0-5]|[0-1]?dd?/; // IP地址的格式是xxx.xxx.xxx.xxx 3个数字一个点的四位字符,匹配3次,加上三位字符,组合就是ip地址 // 我们通过分组,把分组内容匹配三次 // 可以在正则中通过反向引用匹配分组的内容 let reg = /(w{3}) is 1/; reg.test("kid is kid") // true reg.test("dik is dik") // true reg.test("kid is dik") // false reg.test("dik is kid") // false //1 反向引用的内容和分组内容是一样的
特点
用()括起来的匹配正则
1 表示反向引用,引用第一个子表达式的内容
2 表示反向引用,引用第二个子表达式的内容
$0 匹配整个字符串
$1 匹配到的第一个分组的内容
$2 匹配到的第二个分组的内容
断言断言有点像^ $ b那样用于指定一个位置,这个位置应该满足一定的条件(即断言)。通常使用断言用来查找某些内容之前或之后的东西(不包括他们本身);
代码 | 说明 |
---|---|
?=exp | 匹配exp前面的位置 |
?<=exp | 匹配exp后面的位置 |
?!exp | 匹配后面跟的不是exp的位置 |
? | 匹配前面不是exp的位置 |
DEMO
// ?=exp let reg = /w+(?=ing)/ let str = I"m singing while you"re dancing. // 匹配以ing结尾单词的前面部分 // ?<=exp let reg = /(?<=re)w+/; // 匹配re开头单词的后半部分 let str = reading a book;匹配模式
贪婪模式
懒惰模式
当正则表达式中包含能接受重复的限定词时,通常的行为是匹配尽可能多的字符。比如以下:
let reg = /a*b/; let str = "aabab"; let result = str.replace(reg,"X"); // 以上str字符串会被全部替换为一个字符X。这被称为贪婪匹配模式 // result = "X";
但有时候,我们希望匹配尽可能少的字符。只需要在量词限定符的后面再加上一个问号?就行。
let reg = /a*?b/; let str = "aabab"; let result = str.replace(reg,"X"); // 以上str字符串会被全部替换为一个字符X。这被称为贪婪匹配模式 // result = "Xab";
代码 | 说明 |
---|---|
*? | row 1 col 2 |
+? | row 2 col 2 |
?? | row 2 col 2 |
{n,m}? | row 2 col 2 |
+? | row 2 col 2 |
+? | row 2 col 2 |
多思考,多练习,然后校验结果,反复这个过程,在这个过程当中就会一点一点的进步的。
练习题首先下载一个正则表达式测试工具:地址
我们的练习都可以使用这个工具来进行测试;
匹配正确的电话
匹配正确的邮件
匹配IP地址(IPV4)
匹配URL
匹配身份证号码(身份证有18位,最后一位可以是字符X)
匹配整数
匹配小数
匹配中文
匹配xxxx-xx-xx格式的日期(或者xxxx/xx/xx)
去掉http协议的jpg文件的协议头
var imgs = [ "http://img.host.com/images/fds.jpg", "https://img.host.com/images/fjlj.jpg", "http://img.host.com/images/djalsdf.png", "https://img.host.com/images/adsjfl.png", "http://img.host.com/image/jasdlf.jpg" ];
获取 url 中的参数
const _url = "http://img.host.com/images/fds.jpg?name=mmcai&age=28"
字符串中小写数值替换为大写
//给定字符串 const str = "958317640"; //期望结果 const newStr = "九五八三一七六四零"
把数字用科学计数法表达10000000000 变为10.000.000.000
给一个连字符串例如:get-element-by-id转化成驼峰形式
分割数字每三个以一个逗号划分
匹配固定电话000-12345678
匹配以下字符串当中的数值字符,并输出数组
//原字符串 const str = "d3gfhf72gh254bhku289fgdhdy675gfh" // 期望得到的结果 const result = [3,72,254,289,675];
校验密码——只能输入6-20位字母、数字、下划线
匹配汉字
练习答案晚点给出,大家写完也可以百度查找哈,但结果不一定唯一,可以有好几种写法的,只要通过正则校验工具校验通过达到结果就可以哦~。
参考资料:
http://deerchao.net/tutorials...
https://www.imooc.com/video/1...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/105776.html
摘要:说来惭愧,做前端快三年对于正则表达式的应用还是很浅薄,大家都知道正则的速度基本上是最快的,但就是懒得去记那些语法和规则,这次项目中多次用到了需要匹配替换的动作,终于下定决心去研究一下了。 说来惭愧,做前端快三年对于正则表达式的应用还是很浅薄,大家都知道正则的速度基本上是最快的,但就是懒得去记那些语法和规则,这次项目中多次用到了需要匹配替换的动作,终于下定决心去研究一下了。 实例化正则对...
摘要:分组小括号功能较多有三种功能,作用一,把单独的项组合成子表达式。作用三,允许后面引用前面的表达式。如果这时的正则表达式是一个非全局的,那么和正则表达式方法拿到的结果相同。,也可以接受一个正则表达式作为参数。 正则表达式创建字面量创建,a = /abc/gim;构造函数创建,a = new RegExp(abc,gim)正则表达式中的特殊字符,[...] 方括号中的任意字符[^...] ...
摘要:正则表达式作为前端学习的一个知识点,是每个合格的前端开发都应该掌握它的用法。元字符一般情况下,正则表达式的一个字符对应字符串的一个字符。 正则表达式作为前端学习的一个知识点,是每个合格的前端开发都应该掌握它的用法。正则表达式的学习确实不难,语法和应用也非常简单,能够快速入门,很轻松的就能写出简单的表达式来对字符串执行某些操作。网上也有标题党说一杯咖啡的时间就能学会。能学会吗?能!但要真...
阅读 3018·2021-11-22 09:34
阅读 3550·2021-08-31 09:45
阅读 3683·2019-08-30 13:57
阅读 1640·2019-08-29 15:11
阅读 1653·2019-08-28 18:04
阅读 3181·2019-08-28 17:59
阅读 1528·2019-08-26 13:35
阅读 2161·2019-08-26 10:12