利用反向肯定预查和反向否定预查(兼容性不好):/^(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|(?<!02)30|(?<=01|03|05|07|08|10|12)31)$/ 利用正向否定预查:/^(?!0230$)(((01|03|05|07|08|10|12)31$)|(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|30))$/ ['0001', '0228', '0230', '0330', '0331', '0332', '0430', '0431'].forEach(item => { console.log('test:' + item) console.log('反向预查:' + /^(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|(?<!02)30|(?<=01|03|05|07|08|10|12)31)$/.test(item)) console.log('正向预查:' + /^(?!0230$)(((01|03|05|07|08|10|12)31$)|(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|30))$/.test(item)) }) //false true false true true false true false
利用反向肯定预查和反向否定预查(兼容性不好):
/^(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|(?<!02)30|(?<=01|03|05|07|08|10|12)31)$/
利用正向否定预查:
/^(?!0230$)(((01|03|05|07|08|10|12)31$)|(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|30))$/