如果想深究千分位,请看掘金前辈文章 - 6种方法与性能
前提知识
^匹配开始$匹配结束\d匹配数字,等价于[0-9]- 正则中,字符只分两种
- 是 单字字符,等价于[A-Za-z0-9_],记为
\w - 不是 单字字符,等价于[^A-Za-z0-9_],记为
\W\W包括^、$
- 是 单字字符,等价于[A-Za-z0-9_],记为
断言与边界
断言知识
- 先行断言:
x(?=y),后面是y,匹配x - 后行断言:
(?<=y)x,前面是y,匹配x
边界知识
\b匹配\w与\W之间的边界\B匹配 两个\w或 两个\W与\W之间的边界- 断言中,会存在
''空字符,即包括\b,\B- 意思就是你写一个断言y,却不写x,那就匹配空字符
千分位
@胖头鱼的千分位写法
'123456789'.replace(/(?=(\d{3})+$)/g, ',') // ,123,456,789
这里就是因为没写x,那么匹配所有边界(这里@胖头鱼直接否定断言,断言不能为开头(?!^))。所以任何情况,请显式地写上想要地边界。像这样
'123456789'.replace(/\B(?=(\d{3})+$)/g, ',') // 123,456,789
小数点情况
日常使用中,数字会有小数,但一般对小数部分不加千分位分隔符,那么:
- 结尾可以为
$,也可以为. - 再限制一下前面只能为数字
'12345.6789'.replace(/(?<=^\d+)\B(?=(\d{3})+($|\.))/g, ',') // 12,345.6789
否定断言
- 先行否定断言:
x(?!y),后面不是y,匹配x - 后行否定断言:
(?<!y)x,前面不是y,匹配x
校验密码 (正则的叠加)
- 密码长度是6-12位 :
/^(?=.{6,12}$)/ - 由数字、小写字符和大写字母组成 :
/^(?=[\da-zA-Z]{6,12}$)/ - 必须至少包括2种字符 => 不能只是一种 :
/^(?=[\da-zA-Z]{6,12}$)(?!\d+$)(?![a-z]+$)(?![A-Z]+$)/