为数字加上千分号
var string1 = "12345678",
string2 = "123456789";
reg = /(?!^)(?=(\d{3})+$)/g; // 前面不是起始位置且后面有3个数字的位置后+逗号
var result = string1.replace(reg, ',')
console.log(result);
// => "12,345,678"
result = string2.replace(reg, ',');
console.log(result);
// => "123,456,789"
获取匹配到的字段
例如获取类型的Object.prototype.toString.call(),想把他封装成一个函数,我们可以这样做
let type = (val)=>{
let reg = /\s(\w+)/
reg.test(Object.prototype.toString.call(val))
return val?RegExp.$1: ''
}
type([]) // Array
匹配和上一次匹配到完全一样的字符
例如校验日期,会发生一种情况
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
regex.test(2020-01-01) // true
regex.test(2020-01/01) // true
这两种情况也会匹配通过,我们怎么才可以校验匹配到的符号是否一致呢
可以通过这种方式
var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
regex.test(2020-01-01) // true
regex.test(2020-01/01) // false
注意里面的\1,这个就等于分组一所匹配到的值,如此类推,\2\3 就等于第二和第三组匹配到的值了。
驼峰互转
驼峰转换是常见的需求,转驼峰函数
function toCamelCase(str='',isUpper= false) {
if(!str || typeof str !=='string') return str
let reg = new RegExp(`(?:${isUpper?'^|':''}-)(\\w)`,'g')
return str.replace(reg,function(all,target){
return target ? target.toUpperCase() : ''
})
}
toCamelCase('ab-cd-ef-gh') // abCdEfGh
toCamelCase('ab-cd-ef-gh',true) // AbCdEfGh
驼峰转连接符小写字符串
function toHyphenate (str='',char='-'){
if(!str || typeof str !=='string') return str
return str?str.replace(/(\B[A-Z])/g,'-$1').toLowerCase() : ''
}
toHyphenate('AbCdEfGh') // ab-cd-ef-gh