构建正则有一点非常重要,需要做到下面几点的平衡:
正则虽然强大,但不是万能的,很多看似很简单的事情,还是做不到的。
比如匹配这样的字符串:1010010001…。虽然很有规律,但是只靠正则就是无能为力。
比如,从日期中提取出年月日,虽然可以使用正则,但更好的方式是使用 split 来做:
const target = '2022-04-01'
target.match(/^(\\d{4})-(\\d{2})-(\\d{2})/)
// ['2022-04-01', '2022', '04', '01', index: 0, input: '2022-04-01', groups: undefined]
target.split('-')
// ['2022', '04', '01']
比如密码匹配问题,要求密码长度 6-12 位,由数字、小写字符和大写字母组成,但必须至少包括 2 种字符。(详情请见: 密码匹配问题 )
正则可以是:/(?!^[0-9]{6,12}$)(?!^[a-z]{6,12}$)(?!^[A-Z]{6,12}$)^[0-9A-Za-z]{6,12}$/
但更好的做法是拆分多个小正则来做:
const regExp1 = /^[0-9A-Za-z]{6,12}$/
const regExp2 = /^[0-9]{6,12}$/
const regExp3 = /^[A-Z]{6,12}$/
const regExp4 = /^[a-z]{6,12}$/
const checkPassword = (target) => {
if (!regExp1.test(target)) return false
if (regExp2.test(target)) return false
if (regExp3.test(target)) return false
if (regExp4.test(target)) return false
return true
}