又来折腾--正则表达式
正则表达式30分钟入门教程 --很不错值得看,循序渐进的,诱敌深入,渐入佳境/美景
http://deerchao.net/tutorials/regex/regex-1.htm
正则表达式30分钟入门教程-BeJSON.com-- 这篇看着更好的样子
http://www.bejson.com/knownjson/regexJiaocheng/
----------------------
1.元字符介绍
"^" :匹配行或者字符串的起始位置
"$" :匹配行或字符串的结尾
"\w":匹配字母,数字,下划线.
"\d" : 匹配数字
"." :匹配除了换行符以外的任何字符
"[abc]": 匹配包含括号内元素的字符
2.反义
"\W" :匹配任意不是字母,数字,下划线 的字符
"\S" :匹配任意不是空白符的字符
"\D" :匹配任意非数字的字符
"\B" :匹配不是单词开头或结束的位置
"[^abc]" :匹配除了abc以外的任意字符
3.量词
"*" :重复零次或更多
"+" :重复一次或更多次
"?" :重复零次或一次
"{n,m}" :重复n到m次
"{n}" :重复n次
"{n,}" :重复n次或更多次
4限定符
"*?" :重复任意次,但尽可能少重复
"+?" :重复1次或更多次,但尽可能少重复
"??" :重复0次或1次,但尽可能少重复
"{n,m}?" :重复n到m次,但尽可能少重复
"{n,}?" :重复n次以上,但尽可能少重复
------------ 找一些 字符串 到这个网站测试一下,
在线正则表达式测试
http://tool.oschina.net/regex/#
--个人实践--
\beos\.\w*\b 可以帅选出所有 eos.开头的
\b\w*.com 筛选出,com结尾的字符串,但是前面有两个点的筛选不出来。
\b\w*\.com 查找 .com 结尾的
\b\w*\.\w*\.com 只有两个点的.com结尾的被筛选出来
\b\w*\.\w*\.com|\b\w*\.com 一个点或两个点都被筛选出来。
\bvip\.\w*\b 筛选vip. 开头的
\b.*vip.*\b 包含vip的都会出来
\b.*[1-5]{1,12}.*\b 包含1到5数字的都出来
(\d{1,3}\.){3}\d{1,3} 匹配ip,但它也将匹配256.300.888.999这种 错误ip
正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,
2[0-4]\d|25[0-5]|[01]?\d\d? 第一种2开头中间是0到4后面一个随意;第二种25开头,后面一位小于6;
第三种第一位0或1出现一次或者零次,第二位任意数字,第三位数字出现一次或者0次。
验证手机号码 实际代码中 ^[1][3,4,5,7,8][0-9]{9}$这样用,^$整个字符串中,1开头,第二位34578中一个,后接9位数字
--网络例子实践
正则小应用:批量修改文件名 ---里面有点代码
https://zhuanlan.zhihu.com/p/41655899
if (/(\d+\.jpg)/.test(v)) {
fs.rename(v,'baluobo' + RegExp.$1.padStart(6, '0'), () =>{})
}
这个正则 /(\d+\.jpg)/ 这个正则会将 .jpg 连带前面的若干个数字一起取出来放到组里面。RegExp.$1 就取字符串出来,ru 10.jpg 9.jpg 。通过
padStart()js方法 向前补全字符串,例子中字符串总长度不够补0 ,自行百度此方法。
拓展:
看了这个例子让我觉得用传统的方式超级快完成。当然代码是帅的,
结合下方的网友例子。
ren 命令excel
https://www.kafan.cn/A/x3974odonj.html
用cmd dir 输出此目录所有文件名,复制到xls中,拼接成: ren 重命名命令。批量执行。完成。
ren 拔萝卜-10.jpg baluobo10.jpg
==拓展:
正则表达式引擎
正则表达式是一个很方便的匹配符号,但要实现这么复杂,功能如此强大的匹配语法,就必须要有一套算法来实现,而实现这套算法的东西就叫做正则表达式引擎。简单地说,实现正则表达式引擎的有两种方式:DFA 自动机(Deterministic Final Automata 确定型有穷自动机)和 NFA 自动机(Non deterministic Finite Automaton 不确定型有穷自动机)。