最后一次总结正则表达式(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

应用场景

本质上均为匹配,有时候用于校验字符串规则,有时候

  1. 校验,通常为全词匹配,校验输入等。

  2. 查找或提取特定字符串,爬虫常用

    • 提取网页中图片(img标签),超链接(href标签)等

  3. 替换,新增或删除

    • 删除注释,见练习3

    • 新增,见练习1

  4. 判断(特殊校验,使用断言)

    • 判断密码强度

练习

  1. 数字格式化,1234567890 -> 1,234,567,890。\B(?=(\d{3})+$)替换为","\B待替换的内容——边界。加后置断言,当且紧跟3的倍数个数字——(\d{3})+

  2. trim函数实现,即去掉字符串左右的空白字符。(^\s*)|(\s*$)替换为""

  3. 删除注释

    • (?<!:)排除前面包含:的情况,防止http://的情况

    • 替换//和/**/

    1. html<!--(.*?)-->

    2. C/JAVA: ((?<!:)\/\/.*)|(\/*(.\s)*?\*\/)

  4. 判断素数(奇技淫巧,装B用,性能和可读性没优势)

     function isPrime(num) {
  5. 密码校验,要求包括字母,数字,特殊字符(_#$%等)^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W\_]).{8,16}$

附录

教程

  1. http://www.regular-expressions.info/ 类似官方

  2. http://deerchao.net/tutorials/regex/regex.htm 中文教程

  3. http://www.jb51.net/tools/regex_test.htm 速查表

  4. https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ cheatsheet速查

调试工具

  1. https://www.debuggex.com/ 最好用,但经常访问不到或服务出错

  2. https://regex101.com/

  3. https://regexper.com/ 只是解析表达式,不能测试匹配,可本地化

  4. https://regexr.com/ 只是JS解析器

常用正则

  1. https://www.jianshu.com/p/e7bb97218946

以上是关于最后一次总结正则表达式(RegExp)的主要内容,如果未能解决你的问题,请参考以下文章

必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头

JavaScript RegExp对象

最全正则表达式总结:验证QQ号手机号Email中文邮编身份证等

ES6学习总结之 正则表达式

正则表达式归纳总结

RegExp