javascript 正则表达式

23 阅读3分钟

正则表达式

基本结构

  1. 正则表达式由斜线/包围的模式组成,例如: /abc/
  2. 可以使用 new Regexp() 构造函数可以一颗创建正则表达式

元字符

  1. .: 匹配任何除换行之外的单个字符
  2. *: 匹配一个字符 0次或者多次
  3. +: 匹配前一个字符1次或多次
  4. ?: 匹配前一个字符0次或1次
  5. {n}: 匹配一个字符正好n次
  6. {n,}: 匹配一个字符n次或多次
  7. {n, m}: 匹配一个字符至少n次,但不超过m次
  8. ^: 匹配输出字符串的开始位置
  9. $: 匹配输入字符串的结束位置
  10. \d: 匹配一个数字字符
  11. \D: 匹配一个非数字字符
  12. \w: 匹配一个单词字符(字母、数字、下划线)
  13. \W: 匹配一个非单词字符
  14. \s: 匹配任何空白字符串,包括空格、制表符、换页符等
  15. \S: 陪陪任何非空字符串
  16. \b: 匹配一个单词边界
  17. \B: 匹配一个非单词边界

字符类

  1. 使用 方括号[] 定义一个字符集,例如: [abc] 表示匹配 abc
  2. 可以在 方括号[]内 使用 ^ 符号表示否定,例如: [^abc] 表示 匹配除 abc 之外的任意字符

选择、分组和引用

  1. |: 用于选择,匹配左边或者右边的模式
  2. (): 用于分组,可以将一部分模式组合在一起
  3. \1、\2: 引用前面的分组

修饰符

  1. g: 全局搜索,不仅返回第一个匹配,而是返回所有的匹配
  2. i: 不区分大小写搜索
  3. m: 多行搜索、让^$ 分别匹配字符串的开始和结束,以及任何行的开始和结束
  4. y: 执行“粘性”搜索,要求匹配必须从给定的位置开始
  5. u: 将模式视为Unicode 序列点的序列,这样就能正确的吃力四个字节的UTF-16编码
  6. s: 让 . 特殊字符匹配任何字符(包括\n\w

方法

  1. exec(): 在字符串中执行搜索匹配
  2. test(): 检测字符串中是否有匹配
  3. match(): 在字符串中查找匹配项,并返回匹配的数组
  4. replace(): 在字符串中替换匹配项
  5. search(): 在字符串中搜素匹配项,并返回索引
  6. split(): 使用正则表达式将字符串分割为数组

正则表达式对象属性

  1. global: boolean, 表示是否设置了 g 修饰符
  2. ignoreCase: boolean, 表示是否设置了 i 修饰符
  3. lastIndex: 整数,表示下一次匹配的开始位置
  4. multiline: boolean, 表示是否设置了m修饰符
  5. source: 正则表达式的源文本
  6. sticky: boolean, 表示是否设置了 y 修饰符
  7. unicode: boolean, 表示是否设置了 u 修饰符

常用正则表达式规则匹配

  1. 匹配数字:
    • /^\d+$/: 匹配正整数
    • /^\d*.?\d*$/: 匹配非负整数(包括0)
    • /^-[1-9]\d*$/: 匹配负整数
    • /^-?\d+$/: 匹配整数(整数、负数、0)
    • /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/: 匹配正浮点数
    • /^\d*\.?\d*(?!\.\d)$/: 匹配非负浮点数(包括0)
    • /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/: 匹配负浮点数
    • /^-?\d*\.?\d*(?!\.\d)$/: 匹配浮点数(包括正浮点数、0、负浮点数)
  2. 匹配字母和数字
    • /^\w+$/: 匹配由数字、26个英文字母或下划线组成的字符串
    • /^[A-Za-z0-9]$/: 匹配由字母和数字组成的字符串
  3. 匹配中文
    • ^[\u4e00-\u9fa5]+$: 匹配中文字符
  4. 匹配特定格式
    • /^[a-z]+$/: 匹配由小写字母组成的字符串
    • /^[A-Z]+$/: 匹配由大写字母组成的字符串
    • /^[A-Za-z]+$/: 匹配由字母组成的字符串(不区分大小写)
    • /^[A-Za-z0-9]+$/: 匹配由数字和26个英文字母组成的字符串
    • /^\w+$/: 匹配由数字、26个英文字母或者下划线组成的字符串
    • ^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$: 匹配邮箱地址
    • /^0\d{2}-?\d{8}$/: 匹配国内电话号码(以3位区号、8位电话号码为例)
    • ^\d{15}|\d{18}$: 匹配身份证号(15位或18位)
    • /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/: 匹配URL
  5. 匹配特定字符
    • /^\s*$/: 匹配由空格组成的字符串
    • ^\S*$: 匹配由非空格字符组成的字符串
    • /^\t*$/: 匹配由制表符组成的字符串
    • ^\T*$: 匹配由非制表符组成的字符串
  6. 其他常见规则匹配
    • /^特定字符串/: 匹配开头是某个特定字符串
    • /特定字符串$/ : 匹配结尾是某个特定字符串
    • /.*特定字符串.*/: 匹配包含某个特定字符串
    • ^(?!.*特定字符串).*$: 匹配不包含某个特定字符串