我的网站开发技术经验总结 我的网站开发技术经验总结
首页

fangdown

我的网站开发技术经验总结
首页
  • 大前端

  • 基础

    • js

      • 你知道new操作符是如何实现的吗
      • 说说大文件上传的思路
      • 说说对闭包的理解及应用
      • 说说对单点登录sso的理解
      • 说说对防抖节流的理解
      • 说说对函数式编程的理解
      • 说说对内存泄漏的理解及触发场景
      • 说说对事件模型的理解
      • 说说对事件委托的理解及应用场景
      • 说说对原型及原型链的理解
      • 说说对正则表达式的理解
        • 是什么
          • 创建方式
        • 匹配规则
          • 贪婪模式
          • 懒惰模式
          • 分组()
        • 匹配方法
        • 应用场景
      • 说说对BOM的理解及常见操作
      • 说说对Dom的理解及常见操作
      • 说说对JavaScript中事件循环的理解
      • 说说对js的执行上下文的理解
      • 说说对js中变量作用域的理解
      • 说说对js中继承的理解及实现方式
      • 说说对this关键字的理解
      • 说说你对 Immutable Data的理解?如何应用在React项目中
      • 说说如何判断数据类型
      • 说说如何判断一个元素在可视区域内
      • 说说如何实现函数缓存
      • 说说深浅拷贝的区别及实现
      • 说说什么是尾递归及其应用
      • 说说为什么0.1+0.2!==0.3
      • 说说下拉刷新,上拉加载的原理
      • 说说ajax的实现原理
      • 说说call-apply-bind的作用及区别
      • 说说js中本地存储有哪些方式及区别
      • 说说js中的类型转换机制
      • Javscript数组的常用方法有哪些?
      • Javscript字符串的常用方法有哪些?
    • css

    • ES6

  • 框架

  • 情商

  • 算法

  • 网络

  • 千锤百炼
  • 基础
  • js
fangdown
2021-09-01
目录

说说对正则表达式的理解

# 是什么

定义:用来匹配字符串的工具

# 创建方式

  • 字面量
let reg = /\d+/g
  • RegExp
let reg = new RegExp('\\d+', 'g')

# 匹配规则

  • 常用 | 规则 | 描述 | | - | - | | \ | 转义 | | ^ | 匹配输入的开始 | | $ | 匹配输入的结束 | | * | 匹配前一个表达式 0 次或多次 | | + | 匹配前面一个表达式 1 次或者多次。等价于 {1,} | | ? | 匹配前面一个表达式 0 次或者 1 次。等价于{0,1} | | . | 默认匹配除换行符之外的任何单个字符 | | \d | 匹配一个数字 | | \D | 匹配一个非数字字符 | | \f | 匹配一个换页符 | | \n | 匹配一个换行符 | | \r | 匹配一个回车符 | | \s | 匹配一个空白字符,包括空格、制表符、换页符和换行符 | | \S | 匹配一个非空白字符 | | \w | 匹配一个单字字符(字母、数字或者下划线) | | \W | 匹配一个非单字字符 | | x(?=y) | 匹配'x'仅仅当'x'后面跟着'y'。这种叫做先行断言 | | (?<=y)x | 匹配'x'仅当'x'前面是'y'.这种叫做后行断言 | | x(?!y) | 仅仅当'x'后面不跟着'y'时匹配'x',这被称为正向否定查找 | | x(?=y) | 匹配'x'仅仅当'x'后面跟着'y'。这种叫做先行断言 | | (?<=y)x | 匹配'x'仅当'x'前面是'y'.这种叫做后行断言 | | x(?!y) | 仅仅当'x'后面不跟着'y'时匹配'x',这被称为正向否定查找 |

  • 标记 | 标志 | 描述 | | - | - | | g | 全局搜索。 | | i | 不区分大小写搜索。 | | m | 多行搜索。 | | s | 允许 . 匹配换行符。 | | u | 使用unicode码的模式进行匹配。 | | y | 执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。 |

# 贪婪模式

尽可能多的匹配

const string = "12345";
const regx = /(\d{1,3})(\d{1,3})/;
console.log( string.match(reg) );
// => ["12345", "123", "45", index: 0, input: "12345"]

# 懒惰模式

尽可能少的匹配

var string = "12345";
var regex = /(\d{1,3}?)(\d{1,3})/;
console.log( string.match(regex) );
// => ["1234", "1", "234", index: 0, input: "12345"]

# 分组()

  • 使用()可以进行分组
  • $可获取分组的内容
let str = "John Smith";
// 交换名字和姓氏
console.log(str.replace(/(john) (smith)/i, '$2, $1')) // Smith, John

# 匹配方法

  • 字符串: match matchAll search replace split
  • RegExp:test exec
// match
let str = 'fangdown fang1 down1'
let result = str.match(/fang(\w)*/g) // ["fangdown", "fang1"]
// search
let str = 'fangdown'
str.search(/do/) // 4
// replace
let str = 'hello js fangdown js'
str.replace(/js/ig, '') // hello fangdown
// split 去掉空格
"1,2 ,3".split(/,\s*/)  //[1,2,3]

// exec
let str = 'fangdown fang1 down1'
let reg = /fang(\w)*/g
reg.exec(str) // fangdown
// test 
/fang/.test(str)  // true

# 应用场景

  function isIdcard(cardNumber) {
    // 基本格式校验,18 位,最后一位可以为 X
    if (!/^\d{17}[\dxX]$/.test(cardNumber)) {
      return false;
    }

    // 校验码校验
    const wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    const ai = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    let sigma = 0,
      n;
    for (let i = 0; i < wi.length; i++) {
      sigma += wi[i] * +cardNumber[i];
    }
    n = sigma % 11;
    return cardNumber.substr(-1) === ai[n];
  }
  // 座机号码或手机号码
  function isValidTelOrPhoneNumber(telNumber) {
    return (
      /^(086-)?(0\d{2,3}-)(\d{7,8})(-(\d{3,}))?$/.test(telNumber) ||
      /^1[3|4|5|6|7|8|9]\d{9}$/.test(telNumber)
    );
  }
#js
上次更新: 2021/12/19, 18:05:42
说说对原型及原型链的理解
说说对BOM的理解及常见操作

← 说说对原型及原型链的理解 说说对BOM的理解及常见操作→

最近更新
01
多分支修复撞车的问题
05-01
02
如何成为架构师
01-23
03
服务器部署全过程
11-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 fangdown | 粤ICP备19079809号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式