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
// 转换时间戳
/*
now: 秒数 || '2019-01-01' || '2019/01/01'
fmt: all, 根据需求传送
*/
export const format = (now, fmt = 'YYYY-MM-DD') => {
if (typeof now === 'string') {
now = now.replace(/-/g, '/') // PC端支持'-''/',移动端不支持new Date('2019-01-01')
}
now = new Date(now)
const o = {
'M+': now.getMonth() + 1, // 月份
'D+': now.getDate(), // 日
'h+': now.getHours(), // 小时
'm+': now.getMinutes(), // 分
's+': now.getSeconds(), // 秒
'q+': Math.floor((now.getMonth() + 3) / 3), // 季度
'S+': now.getMilliseconds() // 毫秒
}
if (/(Y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (now.getFullYear() + ''))
}
for (let k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, String(o[k]).padStart(RegExp.$1.length, 0))
}
}
return fmt
}
填写详细地址,可以填写汉字、数字、-,大小写字母,并且满足汉字不能少于5个
1
const reg = /(([a-zA-Z\d-]*)([\u4e00-\u9fa5])){5,}/g
实现一个parseQuery函数,能够解析location的search字符串(不包括’?’)(170908)

输入一个search,输出一个object,同名参数则是会成为数组。
var search=”name=Ethan&age=12&address=poi&kaka”
var result=parseQuery(search)=>{name:”Ethan”,age:”12”,address:[“poi”,”kaka”]}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function parseQuery(str){
var reg=/([^&=\s]+)[=\s]?([^&=\s]*)/g;
var obj={}
while(reg.exec(str)){
var key=RegExp.$1;
var value=RegExp.$2;
if(Array.isArray(obj[key])&&value!==""){
obj[key].push(value)
continue
}
if(obj.hasOwnProperty(key)&&value!==""){
obj[key]=[obj[key],value]
continue
}
obj[key]=value
}
return obj
}

实现一个函数,将浮点数左边的数每三位添加一个逗号(170913)

ex:commafy(12000000.11)=>12,000,000.11

1
2
3
4
5
6
7
function commafy(num){
return num && num
.toString()
.replace(/(\d)(?=(\d{3})+\.)/g,function($1,$2){
return $2+','
})
}