正则表达式总结

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

元字符

  • “^”: ^匹配行或者字符串的起始位置;
  • “$”: $会匹配行或字符串的结尾;
  • “\b”: 不会消耗任何字符只匹配一个位置,常用于匹配单词边界;
  • “\d”: 匹配数字;
  • “\w”:匹配字母,数字,下划线;
  • “\s”:匹配空格;
  • “\n”: 匹配一个换行符;
  • “.”:匹配除了换行符以外的任何字符;
  • “[abc]”: 字符组,匹配包含括号内元素的字符;
  • “x|y”: 匹配x或y;
  • “[a-z]”: 字符范围;
  • “”:表示转义,\;

元字符反义

元字符的字母改成大写,意思与原来的相反;

  • “\W”:匹配任意不是字母,数字,下划线的字符;
  • “\S”:匹配任意不是空白符的字符;
  • “\D”:匹配任意非数字的字符;
  • “\B”:匹配不是单词开头或结束的位置;
  • “[^abc]”:匹配除了abc以外的任意字符;

量词

贪婪: 如"*"字符,贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。

懒惰: 如 “?” 懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。

占有: 如"+" 占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金;

  • “*”(贪婪): 重复零次或更多;
  • “+”(占有): 重复一次或更多次;
  • “?”(懒惰): 重复零次或一次;
  • “{n}”: 重复n次;
  • “{n,m}”: 重复n到m次;
  • “{n,}”: 重复n次或更多次;
  • “|”:表示分组;

懒惰限定符

  • “*?”: 重复任意次,但尽可能少重复;
    • 如 “acbacb” 正则"a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb";
  • “+?”: 重复1次或更多次,但尽可能少重复;
  • “??”: 重复0次或1次,但尽可能少重复;
    • 如 “aaacb” 正则 “a.??b” 只会取到最后的三个字符"acb";
  • “{n,m}?”: 重复n到m次,但尽可能少重复;
    • 如 “aaaaaaaa” 正则 “a{0,m}” 因为最少是0次所以取到结果为空
  • “{n,}?”: 重复n次以上,但尽可能少重复;
    • 如 “aaaaaaa” 正则 “a{1,}” 最少是1次所以取到结果为 “a”

后向引用

捕获分组: 就是一个括号内的内容如 “(\d)\d” 而"(\d)" 这就是一个捕获分组,可以对捕获分组进行后向引用如(\d)\d\1 这里的"\1"就是对"(\d)"的后向引用; 使用$0…$9属性可以获得;

\b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

  • “(exp)”: 匹配exp,并捕获文本到自动命名的组里;
  • “(?exp)”: 匹配exp,并捕获文本到名称为name的组里;
  • “(?:exp)”: 匹配exp,不捕获匹配的文本,也不给此分组分配组号;

零宽断言: 查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言

  • “(?=exp)”: 匹配exp前面的位置, 零宽度正预测先行断言;

    • 如 “How are you doing” 正则"(?.+(?=ing))" 这里取ing前所有的字符,并定义了一个捕获分组名字为 “txt” 而"txt"这个组里的值为"How are you do";
    • “Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”;
  • “(?<=exp)” 匹配exp后面的位置, 零宽度正回顾后发断言;

    • 如 “How are you doing” 正则"(?(?<=How).+)" 这里取"How"之后所有的字符,并定义了一个捕获分组名字为 “txt” 而"txt"这个组里的值为" are you doing";
    • “(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”
  • “(?!exp)” 匹配后面跟的不是exp的位置,零宽度负预测先行断言;

    • 如 “123abc” 正则 "\d{3}(?!\d)"匹配3位数字后非数字的结果;
    • 例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
  • “(?<!exp)” 匹配前面不是exp的位置

    • 如 “abc123 " 正则 “(?<![0-9])123” 匹配"123"前面是非数字的结果也可写成”(?!<\d)123"

注释

  • (?#comment)

实战

  • 用户名,4到16位(字母,数字,下划线,减号)

    • /^ [a-z0-9_-]{3,16}$/
  • 密码

    • /^ [a-z0-9_-]{6,18}$/
  • 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

    • /^.(?=.{6,})(?=.\d)(?=.[A-Z])(?=.[a-z])(?=.*[!@# %^&amp;*? ]).* /
  • 整数正则

    • /^\d+$/; 正整数正则
    • /^-\d+$/; 负整数正则
    • /^-?\d+$/; 整数正则
  • 数字正则

    • /^\d*.?\d+$/; 正数正则
    • /^-\d*.?\d+$/; 负数正则
    • /^-?\d*.?\d+$/; 数字正则
  • 十六进制值

    • /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
  • 电子邮箱

    • /^([A-Za-z0-9_-.])+@([A-Za-z0-9_-.])+.([A-Za-z]{2,4})$/
    • /^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/
    • /^ [a-z\d]+(.[a-z\d]+)*@([\da-z](- [\da-z])?)+(.{1,2}[a-z]+)+$/
  • 手机号码正则

    • /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
  • 身份证号正则

    • /^ [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  • URL

    • /^(https?: //)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/
    • /^((https?|ftp|file): //)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/;
  • IP 地址

    • /((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
    • /^(?: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
    • /^(?: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
  • 十六进制颜色正则

    • /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
  • 日期正则

    • /^\d{4}(-)\d{1,2}\1\d{1,2}$/; 简单判定,未做月份及日期的判定
  • QQ号码正则

    • /^ [1-9][0-9]{4,10}$/;
  • 微信号正则 6至20位,以字母开头,字母,数字,减号,下划线

    • /^ [a-zA-Z]([-_ a-zA-Z0-9]{5,19})+$/;
  • 车牌号正则

    • /^ [京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
  • HTML 标签

    • /<([a-z]+)([<]+)(?:>(.)</\1>|\s+/>)$/
  • 删除代码\注释

    • (?<!http:|\S)//.*$
  • Unicode编码中的汉字范围

    • /^ [\u2E80-\u9FFF]+$/
    • /[\u4E00-\u9FA5]/;
  • (?0\d{2}[) -]?\d{8}。

    • 这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。也会匹配不正确的:010)12345678或(022-87654321这样的“不正确”的格式;

参考文献:
http://tool.oschina.net/uploads/apidocs/jquery/regexp.html
https://www.jb51.net/tools/zhengze.html
http://www.cnblogs.com/China3S/archive/2013/11/30/3451971.html
https://www.jqhtml.com/6915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值