常用的正则

243 阅读1分钟
时间格式化处理
/*
formatTime: 时间字符串格式化处理
@params
    template: [string] 最后期望输出的时间格式化模板模板规则$0 => 年 $1-$5 => 月日时分秒
@return
    [string] 格式化后的时间字符串
*/
function formatTime(time, template = '$0年$1月$2日 $3时$4分$5秒') {
  // 1、首先获取时间字符串中的年月日信息
  const timeAry = time.match(/\d+/g)
  template = template.replace(/\$(\d+)/g, (...[, $1]) => {
    const time = timeAry[$1] || '00'
    return time
  })
  return template
}

const time = '2022-1-30 19:44:20'
console.log(formatTime(time)) => '2022年1月30日 19时44分20秒'
console.log(formatTime(time, '$0/$1/$2')) => '2022/1/30'
console.log(formatTime(time, '$0年$1月$2日 $3:$4')) => '2022年1月30日 19:44'
queryURLParams
/*
queryURLParams: 获取URL地址问号后面的参数信息(可能包含hash值)
    @params
	url: string 需要处理的url
    @return
        [object]把所有问号参数信息以简直对的方式存储起来并返回
*/
function queryURLParams(url = '') {
  const obj = {}
  const reg = /([^?=&#]+)=([^?=&#]+)/g
  url.replace(reg, (...[, $1, $2]) => {
    obj[$1] = $2
  })
  url.replace(/#([^?=&#]+)/g, (...[, $1]) => {
    obj.hash = $1
  })
  return obj
}

const url = 'https://huhu.com/?time=2022-01-28&them=new_year#best_wishes'
console.log(queryURLParams(url))
=> {time: '2022-01-28', them: 'new_year', hash: 'best_wishes'}
千分符
/*
    大数的千分符处理
    x(?=y)表示x后面只能是y
    第一个replace是处理小数的情况,提取出整数部分
    \d{1,3}(?=(\d{3})可以理解为从右边开始数三个三个数字,最后剩下左边一个或者三个数字,匹配到之后在他后面加个
    replace中的函数匹配几次就会执行几次这样挨个就将','添上了
*/
function millimetter(number) {
  const reg = /\d{1,3}(?=(\d{3})+$)/g
  return number.replace(/\d+/, num => num.replace(reg, con => `${con},`))
}
console.log(millimetter('12483.885673')) => '12,483.885673'
console.log(millimetter('389260985212353')) => '389,260,985,212,353'

还可以使用Number.prototype.toLocaleString()方法,但是会自动保留三位小数,并且四舍五入
console.log(12483.885673.toLocaleString()) => '12,483.886'
验证是否是有效数字
const reg = /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/
console.log(reg.test('12.44.33')) => false
console.log(reg.test('022')) => false
console.log(reg.test('-23.45')) => true
console.log(reg.test('+56.00000001')) => true
console.log(reg.test('23')) => true
小数校验
const reg = /^[+-]?\d+(\.\d+)$/

console.log(reg.test(12)) => false
console.log(reg.test(12.33)) => true
console.log(reg.test(-12.33)) => true
中文字符串
const reg = /[\u4E00-\u9FA5]/

let str = 'wahah'
console.log(reg.test(str)) => false

str = '哇哈哈'
console.log(reg.test(str)) => true

str = 'wahah哇哈哈hah'
console.log(reg.test(str)) => true