最后一次总结正则表达式(RegExp)
Posted 独家学习分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最后一次总结正则表达式(RegExp)相关的知识,希望对你有一定的参考价值。
之前写过RegExp 常用语法
这次把语法再复习一遍,描述了正则的应用场景,再加上几个练习,希望是自己最后一次总结正则。
语法
量词
字符 | 含义 |
---|---|
? | 0或1次 |
+ | 1次或多次 |
* | 0次或多次 |
{n,m} | n-m次 |
{n,} | n次或更多 |
{n} | n次 |
预定义类
字符 | 等价类 |
---|---|
. | [^\n] |
\d | [0-9] |
\s | [ \f\n\r\t\v] |
\S | [^ \f\n\r\t\v] |
\w | [a-zA-Z_0-9] |
\W | [^a-zA-Z_0-9] |
边界
并没有实际匹配任何字符,只是单纯匹配边界
字符 | 含义 |
---|---|
^ | 开始 |
$ | 结尾 |
\b | 单词开始或结束 |
\B | 非单词开始或结束 |
贪婪
正则表达式默认贪婪模式,在量词后面加?
可启用非贪婪模式。
分组
将量词作用于子表达式,如(zz_zigzag){2}
(?:exp),会忽略改分组,不会匹配组号
后向引用
\b(\w+)\b\s+\1\b
,可匹配he he
这样的字符串,\1
指的是分组1匹配的内容
反向引用
相比于后向引用的\1
,在替换时,$1
指的是分组1匹配的内容
断言
exp(?=assert),如\w(?=\d),意为后面有一个数字的单词字符。
exp(?!assert),如\w(?!\d),意为后面无一个数字的单词字符。
(?<=assert)exp
(?<!assert)exp
使用时相关
字符 | 含义 |
---|---|
g | globle |
i | ignore case |
m | multiline |
应用场景
本质上均为匹配,有时候用于校验字符串规则,有时候
校验,通常为全词匹配,校验输入等。
查找或提取特定字符串,爬虫常用
提取网页中图片(img标签),超链接(href标签)等
替换,新增或删除
删除注释,见练习3
新增,见练习1
判断(特殊校验,使用断言)
判断密码强度
练习
数字格式化,1234567890 -> 1,234,567,890。
\B(?=(\d{3})+$)
替换为","
,\B
待替换的内容——边界。加后置断言,当且紧跟3的倍数个数字——(\d{3})+
。trim函数实现,即去掉字符串左右的空白字符。
(^\s*)|(\s*$)
替换为""
删除注释
(?<!:)
排除前面包含:的情况,防止http://
的情况替换//和/**/
html,
<!--(.*?)-->
C/JAVA:
((?<!:)\/\/.*)|(\/*(.\s)*?\*\/)
判断素数(奇技淫巧,装B用,性能和可读性没优势)
function isPrime(num) {
return !/^1?$|^(11+?)\1+$/.test(Array(num+1).join('1'));
}
密码校验,要求包括字母,数字,特殊字符(_#$%等)
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W\_]).{8,16}$
附录
教程
http://www.regular-expressions.info/ 类似官方
http://deerchao.net/tutorials/regex/regex.htm 中文教程
http://www.jb51.net/tools/regex_test.htm 速查表
https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ cheatsheet速查
调试工具
https://www.debuggex.com/ 最好用,但经常访问不到或服务出错
https://regex101.com/
https://regexper.com/ 只是解析表达式,不能测试匹配,可本地化
https://regexr.com/ 只是JS解析器
常用正则
https://www.jianshu.com/p/e7bb97218946
以上是关于最后一次总结正则表达式(RegExp)的主要内容,如果未能解决你的问题,请参考以下文章
必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头