360前端星计划——正则的三个应用场景

156 阅读1分钟

0、目录:

  1. 正则表达式的创建和使用
  2. 正则表达式的常见用法
  3. 正则与数值

一、创建正则表达式的两种方式

  1. 使用正则表达式字面量
const reg = /[a-z]\d+[a-z]/i

优点:

  • 简单方便
  • 不需要二次转义

缺点:

  • 子内容无法重复使用
  • 过长的正则导致可读性差
  1. 使用RegExp构造函数
const alphabet = '[a-z]';
const reg = new RegExp(`${alphabet}\\d+${alphabet}`,"i");

优点:

  • 子内容可以重复使用
  • 可以通过控制子内容的粒度提高可读性

缺点:

  • 二次转义的问题非常容易导致bug

二、正则表达式的常见用法

  1. RegExp.prototype.test()
  2. RegExp.prototype.source
  3. RegExp.prototype.flags
  4. RegExp.prototype.exec()
  5. String.prototype.match()
  6. RegExp.prototype.lastIndex
  7. String.prototype.replace()
  8. String.prototype.search()

三、正则与数值

数值的正则判断

  1. /[0-9]+/

这个正则表达式存在的问题:
不是全字符匹配,存在误判,如/[0-9]+/.test('a1')===true

  1. /^\d+$/
    这个正则表达式存在的问题:
    不能匹配+-号,不能匹配小数

  2. /^[+-]?\d+(\.\d+)?$/
    这个正则表达式存在的问题:
    不能匹配无整数部分的小数,如.123
    捕获组会带来额外的开销

  3. /^[+-]?(?:\d*\.)?\d+$/ 这个正则表达式存在的问题:
    不能匹配无小数部分的数值,如2. 不能匹配科学计数法,如1e+2

  4. 完整的数值正则
    /^[+-]?(?:\d+\.?|\d*\.\d+)(?:e[+-]?\d+)?$/i