-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path21.正则知识.js
59 lines (53 loc) · 1.98 KB
/
21.正则知识.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* @Description:
* @version:
* @Author: 朱宇
* @Date: 2019-08-17 22:49:16
* @LastEditTime: 2019-08-17 23:44:50
*/
// ?=表示匹配模式
// ?!表示匹配非模式
'qihuangqihuang'.replace(/(?=i)/g, '#');
// "q#ihuangq#ihuang",?=正向预查匹配,匹配右边为i的左边部分,左边部分未指定就插入
'qihuangqihuang'.replace(/q(?=i)/g, '#')
//'#ihuang#ihuang'左边部分指定了,就替换
'qihuangqihuang'.replace(/(?!i)/g, '#');
// "#qi#h#u#a#n#g#qi#h#u#a#n#g#"?!正向预查不匹配,除去匹配右边为i的左边部分,也就是右边不为i
'qihuangqihuang'.replace(/(q?!i)/g, '#');
//'qihuangqihuang'//匹配右边不为i的的q元素进行什么操作。
var reg1 = /(?=\d{3}$)/g;
var reg2 = /(?=(\d{3})+$)/g
var reg3 = /(?!^)(?=(\d{3})+$)/g
var reg4 = /(?!\b)(?=(\d{3})+\b)/g
var str1 = '12345678'
var str2 = '123456789'
var str3 = '12345678|123456789'
var str4 = '12345678.123456789'
str1.replace(reg1, ',')
// "12345,678"
// 只匹配一次,最后一个
str1.replace(reg2, ',')
"12,345,678"
// 匹配所有
str2.replace(reg2, ',')
// ",123,456,789"
// 匹配所有问题来了,开头不能有
str2.replace(reg3, ',')
// "123,456,789"
// ?!^表示模式,可以理解为非开头,?!和?=一个是表示不是模式,一个是是模式,?=^就匹配开头
str3.replace(reg3, ',')
// "12345678|,123,456,789"
// 问题来了,把非数字匹配进去了,这里主要是为了.演示,所以我们要把上面的非开头,替换成,非单词边界
// 单词边界就是单词和单词的中间,比如AB.C的单词边界就是[]AB[].[]C,有三个单词字母边界
// 单词边界是\b,那非单词边界就是?!\b,其中?!\b === \B,所以我这里的reg3和你发的那段,基本是一样的
str3.replace(reg4, ',')
// 12,345,678|123,456,789
function formatNumber(num) {
return num
.toFixed(2)
.replace(/\B(?=(\d{3})+\b)/g, ",")
.replace(/^/, '$ ');
}
formatNumber(123456.75456)
console.log(formatNumber(123456.75456))
// $ 123,456.75