常用的正则小知识

73 阅读3分钟

定义

  • 正则表达式是描述字符模式的对象
  • 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具
  • String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数
  • 正则表达式主要用来验证客户端的输入数据。可以节约大量的服务器端的系统资源,并且提供更好的用户体验

String中的正则

  • match(Reg)
    • 返回RegExp匹配的包含全部字符串的数组或null
    var str = 'hello';
    var Reg = /e/i;
    str.match(Reg);//['e']
    
  • search(Reg)
    • 返回RegExp匹配字符串首次出现的位置
  • replace(Reg,newStr)
    • 用newStr替换RegExp匹配结果,并返回新字符串
  • split(Reg)
    • 返回字符串按指定RegExp拆分的数组

RegExp对象使用

  • exec()
    • 在字符串中执行匹配搜索,返回首次匹配结果数组
  • test()
    • 在字符串中测试模式匹配,返回true或false

正则使用规则

修饰符

  • 执行区分大小写和全局匹配
    • i:忽略大小写进行匹配
    • g:全局匹配,默认只匹配第一个元素,就不再进行匹配
    • m:执行多次匹配
    let patt =  /pattern/i;         //忽略大小写匹配
    let patt =  /pattern/g;         //全局匹配
    let patt =  /pattern/m;         //执行多行匹配
    

pattern

  • 基本匹配
    • xxx--------------------------匹配xxx字符,eg: let Reg = /abc/
    • x|y|z-------------------------匹配x或y或z字符,eg:let Reg = /abc|bac|cba/
  • []匹配字符簇
    • [abc]--------------匹配abc中间任意一个字符
    • [^abc]------------------匹配非a非b且非c字符的内容
    • [0-9]---------------匹配0-9之间的数字
    • [a-z]---------------匹配小写a到小写z的字符
    • [A-Z]----------------匹配大写A-Z的字符
    • [\u4e00-\u9fa5]--------------------匹配中文
    • 组合匹配:var Reg = /hello [0-9a-zA-z]/
    console.log(/[小虎]/.test('是个人'));
    //字符串中是否存在不是 小 也不是 虎的字符
    console.log(/[^小虎]/.test('小虎'));
    console.log(/[7-9]/.test('432423'));
    //匹配是否存在中文 unicode 字码表中 从'一' 到 '龥' 代表了所有汉字
    console.log(/[\u4e00-\u9fa5]/.test('肥嘟嘟'));
    
  • 元字符
    • .-> 匹配除了换行符之外的任何字符 符号 字符串 数字
    • \w->匹配单词字符、数字、下划线,即包括下划线在内的单个字符(数字 字母(大小写))
    • \W->匹配非单词字符、数字和下划线,即非单字字符 除了\w的之外的
    • \d->匹配数字
    • \D->匹配非数字
    • \s->匹配空白字符(空格)
    • \S->匹配非空白字符
    • \b->匹配单词边界(除了单词字符都算边界)
    • \B->匹配非单词边界
    • \n->匹配换行符
    /*
      元字符 可以用来指代一类字符的 标识符 \d \D \W \S
      转义符 在需要转义元字符前面家 \  \ => \\ /=>\/
    */
    // . 元字符 匹配除了换行符之外的任何字符 符号 字符串 数字
    console.log(/./.test('fsdfs'));
    // \d 匹配数字[0-9] digit 
    console.log(/\d/.test('fs32dfs'));
    // \D 匹配除了[0-9] not digit 
    console.log(/\D/.test('312314512'));
    // \w [A-Za-z0-9_] word 包括下划线在内的单个字符(数字 字母(大小写))
    console.log(/\w/.test('^&*%^&$%^&^&*(&*'));
    // \W 非单字字符 除了\w的之外的
    console.log(/\W/.test('哈哈哈'));
    // \s 空格 空白符 制表符 换页符 换行符 space
    console.log(/\s/.test('fsdkljfsldfsdfs'));
    // \S not space 匹配非空白字符
    console.log(/\S/.test('  fdd '));
    // \b  匹配`单词边界` ( 除了 (字)字母 数字_ 都算单词边界) 不常用
    console.log(/\b/.test('jklfdsjklkljgg sdfs (fsd) | '));
    // \B  匹配\b 不匹配的 不常用
    console.log(/\B/.test('jklfdsjklkljgg sdfs (fsd) | '));
    // \n 匹配换行符 \r 回车符 \t 匹配制表符  \f换页符 \v垂直制表符 [\b]回退符 backspace
    console.log(/\n|\t/.test('fdsjkflsd\rjfsd'));
    // 现在要匹配 '.' 转义符号 .
    var reX = /\\/;
    console.log(/\./.test("/345.32d"));
    
  • 量词
    • n?———————————匹配0个或一个n的字符串
    • n*———————————匹配0个或多个字符串(任意个)
    • n+———————————匹配至少一个n字符串
    • n{X}——————————匹配包含X个n的序列的字符串
    • n{X,Y}————————–匹配包含至少X或至多Y个n的序列的字符串
    • n{x,}—————————-匹配至少X个n的序列字符串
    • ^n———————————匹配以n开头的字符串
    • n$———————————匹配以n结尾的字符串

常用正则表达式

  • 电话号码
    • 宽松(只要是13,14,15,16,17,18,19开头即可)
    • /^(?:(?:\+|00)86)?1[3-9]\d{9}$/
  • 身份证号码(二代)
    • 最后一位是校验位,可能为数字或字符X
    • /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/
  • 用户名校验(4到16位(字母,数字,下划线,减号))
    • /^[a-zA-Z0-9_-]{4,16}$/
  • 16进制颜色匹配
    • /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/

-----------------------------------------------------------------------------------------------2024.5.1每日一题