• 十个值得珍藏的正则表达式


    正则表达式常学常忘,记规则不如记例子,记多不如记精,记例子就记最经典的。下面是本人珍藏的十个有用的正则表达式,不吝分享,以飨读者。

    正则表达式要点

    在这里插入图片描述

    几个记忆点

    • 小括号:代表分组
    • 中括号:代表集合
    • 大括号:代表个数
    • 尖括号不是元字符,下划线不是元字符,但破折号是
    • \s和\S, \b和\B, \w和\W的是三对对偶子,“小正大否”, 也就是小写的表示匹配,大写的表示不匹配。 \s匹配任何空白字符,\b匹配单词边界,\w匹配单词,对应的大写字母刚好反之。

    实例

    下面以javascript语言为例,展示正则表达式的经典例子,基本覆盖了基本用法。

    1. 多个空行变成单空行

    经常遇到别人给的文本文件,里面出现多个空行,一般IDE格式化也无能为力,怎么办?正则表达式可以派上用场。

    let lines = `
    djaidjsia
    lllds
    daskldas
    dasdlas
    
    
    
    
    dasklda
    
    
    
    
    kaskldsad
    `
    // str = lines.replace(/^(\s*\n){2,}/, "\n")
    str = lines.replace(/^\s*[\r\n]|^\s+| +(?= )| +$|\s+$(?![^])/gm, '\n');
    console.log(str)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在IntelliJ idea里可以运用上述表达式做全局替换。

    2. 符合强度的密码

    长度8到18位,至少1个字母,1个数字和1个特殊字符

    /^(?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[!@#KaTeX parse error: Expected group after '^' at position 1: ^̲&*()_-]).{8,18}/

    在这里插入图片描述

    3. 有效的身份证号码(十八位)

    十八位的公民身份号码,排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

    var pattern = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
    console.log(p.test("11010519501130002X"));
    
    • 1
    • 2

    4. 提取网页中所有超链接

    
    (?i)<a([^>]+)>(.+?)</a>
    
    说明:
    ?i表示大小写敏感,[^>]+表示匹配任何字符串,但不包含>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. 匹配HTML标签

    <("[^"]*"|'[^']*'|[^'">])*>
    
    <	  	#start with opening tag "<"
     (		#   start of group #1
       "[^"]*"	#	only two double quotes are allow - "string"
       |		#	..or
       '[^']*'	#	only two single quotes are allow - 'string'
       |		#	..or
       [^'">]	#	cant contains one single quotes, double quotes and ">"
     )		#   end of group #1
     *		# 0 or more
    >		#end with closing tag ">"
    >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6. 匹配IP地址

    ^([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]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$
    
    
    • 1
    • 2
    • 3

    7. 检查Email地址

    \b[\w.!#$%&*+\/=?^`{|}~-]+@[\w-]+(?:\.[\w-]+)*\b
    
    • 1

    8. 不包含字符串

    不包含hello:

    var pattern = /^((?!hello).)*$/
    console.log(pattern.test('abhellocba'))
    console.log(pattern.test('abhellcba'))
    
    • 1
    • 2
    • 3

    不包含hello,也不包含world:

    pattern = /^((?!hello)(?!world).)*$/
    console.log(pattern.test('abhellocba'))
    console.log(pattern.test('abhellcba'))
    
    • 1
    • 2
    • 3

    9. 检查中文和CJK字符(中日韩字符)

    指定中文的unicode编码区间来匹配中文:

    ^[\\u4e00-\\u9fa5]{0,}$
    
    • 1

    检查CJK字符,采用:

    ([\u4e00-\u9fff]+|[\uff00-\uffef]+)
    
    • 1

    同理,还可以指定字符的unicode编码来匹配货币代码:

    (?=.*\d+)(?=.*[\u00A5\uFFE5\uFFE1\u5713\uFF04\u20A4\u0024\u5186]+)
    
    • 1

    10. 匹配十六进制数

    /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
    
    • 1

    在这里插入图片描述

    总结

    太史公曰:正则表达式是程序员手中的利剑,能解决许多人生中不大不小的烦恼。不会正则表达式不足语编程。有这十个正则表达式防身,没人再敢欺负你。

  • 相关阅读:
    TienChin 渠道管理-渠道搜索
    Android开发笔记1:Android Studio 2021.3.1.17 Toolbar工具栏调整
    RT-Thread 4. ENV安装
    JavaScript从入门到精通系列第二十五篇:JavaScript中的Date对象
    使用kubeadm快速部署一个K8s集群
    Go 调度器——schedule
    Python3.x安装Pandas教程
    贪心算法-IPO问题
    CMake官方教程3--对库加入使用限制
    云呐|如何利用系统管理固定资产?如何进行固定资产管理?
  • 原文地址:https://blog.csdn.net/jgku/article/details/127957221