0、目录:
- 正则表达式的创建和使用
- 正则表达式的常见用法
- 正则与数值
一、创建正则表达式的两种方式
- 使用正则表达式字面量
const reg = /[a-z]\d+[a-z]/i
优点:
- 简单方便
- 不需要二次转义
缺点:
- 子内容无法重复使用
- 过长的正则导致可读性差
- 使用RegExp构造函数
const alphabet = '[a-z]';
const reg = new RegExp(`${alphabet}\\d+${alphabet}`,"i");
优点:
- 子内容可以重复使用
- 可以通过控制子内容的粒度提高可读性
缺点:
- 二次转义的问题非常容易导致bug
二、正则表达式的常见用法
- RegExp.prototype.test()
- RegExp.prototype.source
- RegExp.prototype.flags
- RegExp.prototype.exec()
- String.prototype.match()
- RegExp.prototype.lastIndex
- String.prototype.replace()
- String.prototype.search()
三、正则与数值
数值的正则判断
- /[0-9]+/

这个正则表达式存在的问题:
不是全字符匹配,存在误判,如/[0-9]+/.test('a1')===true
-
/^\d+$/
这个正则表达式存在的问题:
不能匹配+-号,不能匹配小数 -
/^[+-]?\d+(\.\d+)?$/
这个正则表达式存在的问题:
不能匹配无整数部分的小数,如.123
捕获组会带来额外的开销 -
/^[+-]?(?:\d*\.)?\d+$/这个正则表达式存在的问题:
不能匹配无小数部分的数值,如2. 不能匹配科学计数法,如1e+2 -
完整的数值正则
/^[+-]?(?:\d+\.?|\d*\.\d+)(?:e[+-]?\d+)?$/i