好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 yuqiaobin 于 2020-2-26 16:18 编辑
模糊匹配一、使用量词
使用量词。譬如{m,n},表示连续出现最少m次,最多n次,比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”/ab{2,5}c/g,后面多了g,它是正则的一个修饰符。表示全局匹配。
1.简写
{m,} 表示至少出现m次。
{m} 等价于{m,m},表示出现m次。
? 等价于{0,1},表示出现或者不出现。
+ 等价于{1,},表示出现至少一次。(追加嘛,至少要一次才能追)
* 等价于{0,},表示出现任意次,有可能不出现。(通配符)
二、使用字符组。
譬如[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个 /a[123]b/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"
1. 使用范围广
利用连接符‘-’,如[0-9a-z]表示既可以是数字也可以是小写字母
2. 排除字符组
你会不想要一些字符,你可以使用’^’表示脱去
例如[^abc],表示是一个除"a"、"b"、"c"之外的任意一个字符
3.常用的简写形式
\d就是[0-9]。表示是一位数字
\D就是[^0-9]。表示除数字外的任意字符。
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简 写,也称单词字符
\W是[^0-9a-zA-Z_] 非单词字符。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车 符、换页符。
\S是[^ \t\v\n\r\f]。 非空白符。
.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔 符和段分隔符除外。
注意大小写哦!!!
三.贪婪匹配和惰性匹配
正则/\d{2,5}/,表示数字连续出现2到5次。会匹配2位、3位、4位、5位连续数字,那如果我只要2次,也就是满足匹配的下限,这就叫惰性匹配,如果要5次,也就是满足匹配的上限,这就叫贪婪匹配。
怎么实现惰性匹配呢?方法就是在你的量词后面加个问号。例如 {m,n}? {m,}? ?? +? *?
四.分支
具体形式如下:(p1|p2|p3),其中p1、p2和p3是子模式,用|(管道符)分隔,表示其中任何之一。意思大概就和”或“差不多。
/good|goodbye/,该正则表达式如果来识别goodbye这个单词,它匹配到是good,因为 | 符号是惰性的,如果匹配到第一个字符满足需求就会停止匹配(这好像和C语言的或有差不多的操作)
五.具体用处(五个例子,很有用!!!)
1. 写网页的时候,想要把你源码所有的颜色get出来,就可以使用正则表 达式
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
var string = "#ffbbad #Fc01DF #FFF #ffE";
console.log( string.match(regex) );
输出的结果是 ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
2. 匹配时间的时候,比如22:33
var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
console.log( regex.test("23:59") );
console.log( regex.test("02:07") );
输出 true true
看到这里,你会觉得奇怪,^不是表示否定的吗???而这里的意思好像不是否定,没错,官方的文档是这样说的
[^ ] | 否定的字符种类。匹配除了方括号里的任意字符 | ^ | 从开始行开始匹配. | $ | 从末端开始匹配. |
明白差别了吗,^使用在字符组[]中才表示否定
3. 匹配日期的时候,比如2020-02-25
这个也不难啦,注意分类讨论
/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
4. 文件夹正则表达式
var regex = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/;
console.log( regex.test("F:\\study\\javascript\\regex\\") );
console.log( regex.test("F:\\study\\javascript") );
console.log( regex.test("F:\\") );
输出结果: true true true
5. id正则表达式
目的:<div id="container" class="main"></div>
提取出id="container"
如果你用/id=”.*”/(无限重复通配符)
这下会把直到最后一个双引号的内容全部囊括,出事。。。。
所以,惰性匹配,/id=”.*?”/惰性匹配只会获取一个
题外话:我之前写python爬虫玩的时候一直记得是“点星问”,却不知道其中的原理,现在终于懂了hhh
测试平台:https://regex101.com/r/dmRygT/1
参考文章:
https://www.zhihu.com/tardis/sogou/art/30750456
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md#1-%E5%9F%BA%E6%9C%AC%E5%8C%B9%E9%85%8D
剩下的明天补充
附件的排版比较好一点。。。。
今天总结的第二份已发。
传送门。
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1116487&page=1&extra=#pid30228904
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|