正则表达式(一)
本帖最后由 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,},表示出现任意次,有可能不出现。(通配符)
二、使用字符组。
譬如,表示该字符是可以字符“a”、“b”、“c”中的任何一个/ab/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"
1. 使用范围广
利用连接符‘-’,如表示既可以是数字也可以是小写字母
2. 排除字符组
你会不想要一些字符,你可以使用’^’表示脱去
例如[^abc],表示是一个除"a"、"b"、"c"之外的任意一个字符
3.常用的简写形式
\d就是。表示是一位数字
\D就是[^0-9]。表示除数字外的任意字符。
\w就是。表示数字、大小写字母和下划线。记忆方式: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 = /#({6}|{3})/g;
var string = "#ffbbad #Fc01DF #FFF #ffE";
console.log( string.match(regex) );
输出的结果是 ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
2. 匹配时间的时候,比如22:33
var regex = /^(|):$/;
console.log( regex.test("23:59") );
console.log( regex.test("02:07") );
输出 true true
看到这里,你会觉得奇怪,^不是表示否定的吗???而这里的意思好像不是否定,没错,官方的文档是这样说的
[^ ]否定的字符种类。匹配除了方括号里的任意字符
^从开始行开始匹配.
$从末端开始匹配.
明白差别了吗,^使用在字符组[]中才表示否定
3. 匹配日期的时候,比如2020-02-25
这个也不难啦,注意分类讨论
/^{4}-(0|1)-(0||3)$/
4. 文件夹正则表达式
var regex = /^:\\([^\\:*<>|"?\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
谢谢分享! 收藏等更新了 大哥 谢谢分享! 很详细,感谢楼主! 收藏了,等更新。 谢谢分享 多谢楼主分享~~ 谢谢分享!!! 谢谢楼主,收集了。