千分位分割
var a = '2221221225.88';
var b = a.replace(/(\d{3})(?=\d)/g, '$1,')
解析:如下第一个括号(\d{3})代表的是3个数字;
第二个括号\d代表数字,也就是在满足前面的情况下,下一个是数字的就满足要匹配的东西;
$1代表第一个括号的内容;结果如下console.log(b)//222,122,122,5.88
正则表达式(?=pattern)
的语法
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,”Windows(?=95|98|NT|2000)”能匹配”Windows2000”中的”Windows”,但不能匹配”Windows3.1”中的”Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
同样,通过这三个列子的结果,我们也可以理解下面这句话了
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
我们再来对比一下列1和列2
var a = '13245646';
//列1
var reg1 = /(\d{3})(\d)/g
var reg2 = /(\d{3})(?=\d)/g
console.log('reg1:', a.match(reg1) )
console.log('reg2:',a.match(reg2) )
//输出
//reg1: (2) ["1324", "5646"]
//reg2: (2) ["132", "456"]
可以看到reg1在下一次的匹配中,是从(\d)之后的下一个字符开始匹配,而reg2中的下一次匹配时,却是直接从(\d{3})的下一个字符开始匹配。
转换驼峰实现方式
var str = 'border-bottom-color'
var reg = /-(\w)/g
str=str.replace(reg,function($0,$1){
return $1.toUpperCase()
})
console.log(str)
// 结果为 borderBottomColor
$0代表匹配到的东西 -b,-c;$1代表第一个括号,就是用B去替换-b,用C去替换-c
var str = 'border-bottom-color'
var reg = /-(\w)(\w)/g
str=str.replace(reg,function($0,$1,$2){
return $1.toUpperCase()+$2.toUpperCase()
})
console.log(str) //borderBOttomCOlor