正则表达式总结

作者: alanwhy | 来源:发表于2019-04-08 21:25 被阅读2次

什么是正则表达式?

正则表达式(Regular Expression或Regex),是用于定义某种特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,进行输入数据的验证,查找英文单词的拼写错误等。

调试工具

https://regex101.com/
https://regexr.com/
https://www.regexpal.com/

规则总结

在Javascript中,一个正则表达式以 /开头和结尾,所以简单至 /hello regexp/ 就是一个正则表达式。

Flags(标志符或修饰符)

Flags写在结束的/之后,可以影响整个正则表达式的匹配行为。

  • g:全局匹配(global);正则表达式默认只会返回第一个匹配结果,使用标志符g则可以返回所有匹配
  • i:忽略大小写(case-insensitive);在匹配时忽略英文字母的大小写
  • m:多行匹配(multiline);将开始和结束字符(^和$)视为在多行上工作,即分别匹配每一行(由 \n\r 分割)的开始和结束,而不只是只匹配整个输入字符串的最开始和最末尾处

Character Sets(字符集合)

用于匹配字符集合中的任意一个字符

  • [xyz]:匹配 "x""y" "z"
  • [^xyz]:补集,匹配除 "x" "y" "z"的其他字符
  • [a-z]:匹配从 "a""z" 的任意字符
  • [^a-n]:补集,匹配除 "a""n" 的其他字符
  • [A-Z]:匹配从 "A""Z" 的任意字符
  • [0-9]:匹配从 "0""9" 的任意数字

Quantifiers (量词)

实现重复匹配

  • {n}:匹配 n
  • {n,m}:匹配 n-m
  • {n,}:匹配 >=n
  • ?:匹配 0 || 1
  • *:匹配 >=0 次,等价于 {0,}
  • +:匹配 >=1 次,等价于 {1,}

Metacharacters(元字符)

在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。

  • \d:匹配任意数字,等价于 [0-9]
  • \D:匹配任意非数字字符;\d 的补集
  • \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_]
  • \W:匹配任意非基本拉丁字母表中的字母和数字,以及下划线;\w 的补集
  • \s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他Unicode空格
  • \S:匹配一个非空白符;\s的补集
  • \b:匹配一个零宽单词边界,如一个字母与一个空格之间;例如,/\bno/ 匹配 "at noon" 中的 "no"/ly\b/ 匹配 "possibly yesterday." 中的 "ly"
  • \B:匹配一个零宽非单词边界,如两个字母之间或两个空格之间;例如,/\Bon/ 匹配 "at noon" 中的 "on"/ye\B/ 匹配 "possibly yesterday." 中的 "ye"
  • \t:匹配一个水平制表符(tab)
  • \n:匹配一个换行符(newline)
  • \r:匹配一个回车符(carriage return)

Special Characters (特殊字符)

  • \:转义字符,可以将普通字符转成特殊字符。比如 \w;也可以将特殊字符转成字面意思,比如 \+ 匹配 "+"
  • .:匹配任意单个字符,但是换行符除外:\n, \r, \u2028\u2029;在字符集中([.]),无特殊含义,即表示 '.' 的字面意思
  • |:替换字符(alternate character),匹配 | 前或后的表达式。比如需要同时匹配 "bear""pear",可以使用 /(b|p)ear/ 或者 /bear|pear/;但是不能用 /b|pear/,该表达式只能匹配 "b""pear"
  • ^:匹配输入的开始。比如,/^A/ 不匹配 "an Apple" 中的 "A",但匹配 "An apple" 中的 "A"
  • $:匹配输入的结尾。比如,/t$/ 不匹配 "eater" 中的 "t",但匹配 "eat" 中的 "t"^$ 在表单验证时常需要使用,因为需要验证从开始到结尾的一个完整输入,而不是匹配输入中的某一段

Groups(分组)

  • (xyz):捕获分组(Capturing Group),匹配并捕获匹配项;例如,/(foo)/ 匹配且捕获 "foo bar." 中的 "foo"。被匹配的子字符串可以在结果数组的元素 [1], ..., [n] 中找到,或在被定义的 RegExp 对象的属性 1, ...,9 中找到
  • (?:xyz):非捕获分组(Non-capturing Group),匹配但不会捕获匹配项;匹配项不能再次被访问到
  • \nn 是一个正整数,表示反向引用(back reference),指向正则表达式中第n个括号(从左开始数)中匹配的子字符串;例如,/apple(,)\sorange\1/ 匹配 "apple, orange, cherry, peach." 中的 "apple,orange,"

Assertion(断言)

  • x(?=y):仅匹配被y跟随的x;例如,/bruce(?=wayne)/,如果"bruce"后面跟着wayne,则匹配之。/bruce(?=wayne|banner)/ ,如果"bruce"后面跟着"wayne"或者banner,则匹配之。但是,"wayne""banner" 都不会在匹配结果中出现
  • x(?!y):仅匹配不被y跟随的x;例如,/\d+(?!\.)/ 只会匹配不被 "." 跟随的数字。

应用

匹配手机号码

/^1[34578]\d{9}$//^1(3|4|5|7|8)\d{9}$/
因为使用捕获括号存在性能损失,所以推荐使用第一种写法

匹配电子邮件

标准的电子邮件组成为 <yourname>@<domain>.<extension><optional-extension>

  • yourname:/[a-z\d._-]+/
  • domain:/[a-z\d-]+/
  • extension: /[a-z]{2,8}/
  • optional-extension:/(\.[a-z]{2,8})?/
    /^([a-z\d._-]+)@([a-z\d-]+)\.([a-z]{2,8})(\.[a-z]{2,8})?$/

原文链接:还不会正则表达式?看这篇!

相关文章

  • vue(2) - 收藏集 - 掘金

    javascript 正则表达式总结 - 前端 - 掘金为什么要使用正则表达式 正则表达式通过由普通字符和特殊字符...

  • 2020-03-28 正则表达式基础与高级

    史上最全正则表达式语法,文末附常用表达式! 正则表达式的回溯 总结:回溯越少效率越高

  • 正则表达式优化

    正则表达式优化——《精通正则表达式》总结 [TOC] 第4章:表达式的匹配原理 引擎 DFA (Determini...

  • 正则表达式语法

    正则表达式简单语法总结 一、什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索...

  • 人人都看得懂的正则表达式教程

    人人都看得懂的正则表达式教程正则简单总结 正则表达式30分钟入门 RegExr http://regex.zj...

  • 正则表达式

    js正则表达式总结 正则表达式的字符匹配量词横向模糊匹配var regex = /ab{2,5}/gg 表示全局匹...

  • Python学习总结【连载】(十五)

    Python学习总结【连载】(十五) 2018.07.02 Juttachen 概述 53 认识正则表达式 54 ...

  • Javascript 中的正则表达式 - 基本介绍及其语法

    正则表达式强悍无比,在不同的语言中会有些许差异,本文主要总结在 Javascript 中的正则表达式; javas...

  • JavaScript 中的正则表达式

    一、正则表达式声明 1、通过构造函数定义 2、通过直接量定义 (较为常用) 3、正则表达式的组成 (总结)由一些 ...

  • 正则表达式01

    正则表达式根据李炎灰视频教程总结 创建正则表达式有两种方式字面量的方式let box = 'box';let pa...

网友评论

    本文标题:正则表达式总结

    本文链接:https://www.haomeiwen.com/subject/itlmiqtx.html