有用的正则

千位格式

const formatMoney = (money) => {
    return money.replace(new RegExp(`(?!^)(?=(\\d{3})+${money.includes('.') ? '\\.' : '$'})`, 'g'), ',')
}

驼峰式字符串

// 1. foo Bar => fooBar
// 2. foo-bar---- => fooBar
// 3. foo_bar__ => fooBar

const camelCase = (string) => {
    const camelCaseRegex = /[-_\s]+(.)?/g
    return string.replace(camelCaseRegex, (match, char) => {
        return char ? char.toUpperCase() : ''
    })
}

小写转大写

const capitalize = (string) => {
    const capitalizeRegex = /(?:^|\s+)\w/g
    return string.toLowerCase().replace(capitalizeRegex, (match) => match.toUpperCase())
}

console.log(capitalize('hello world')) // Hello World
console.log(capitalize('hello WORLD')) // Hello World

HTML转义

const escape = (string) => {
    const escapeMaps = {
        '&': 'amp',
        '<': 'lt',
        '>': 'gt',
        '"': 'quot',
        "'": '#39'
    }
    // The effect here is the same as that of /[&amp;<> "']/g
    const escapeRegexp = new RegExp(`[${Object.keys(escapeMaps).join('')}]`, 'g')
    return string.replace(escapeRegexp, (match) => `&${escapeMaps[match]};`)
}
const unescape = (string) => {
    const unescapeMaps = {
        'amp': '&',
        'lt': '<',
        'gt': '>',
        'quot': '"',
        '#39': "'"
    }
    const unescapeRegexp = /&([^;]+);/g
    return string.replace(unescapeRegexp, (match, unescapeKey) => {
        return unescapeMaps[ unescapeKey ] || match
    })
}

检查24小时制


const check24TimeRegexp = /^(?:(?:0?|1)\d|2[0-3]):(?:0?|[1-5])\d$/

检查日期格式

const checkDateRegexp = /^\d{4}([-\.\/])(?:0[1-9]|1[0-2])\1(?:0[1-9]|[12]\d|3[01])$/
var reg1 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
var reg2 = /^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$/;

匹配颜色

const matchColorRegex = /#(?:[\da-fA-F]{6}|[\da-fA-F]{3})/g

检查版本号

const versionRegexp = /^(?:\d+\.){2}\d+$/

获取网页图片地址

const matchImgs = (sHtml) => {
    const imgUrlRegex = /<img[^>]+src="((?:https?:)?\/\/[^"]+)"[^>]*?>/gi
    let matchImgUrls = []

    sHtml.replace(imgUrlRegex, (match, $1) => {
        $1 && matchImgUrls.push($1)
    })
    return matchImgUrls
}

格式化电话号码

let mobile = '18379836654'
let mobileReg = /(?=(\d{4})+$)/g
console.log(mobile.replace(mobileReg, '-')) // 183-7983-6654

验证邮箱的正则表达式

function isAvailableEmail(sEmail) {
    var reg = /^([\w+\.])+@\w+([.]\w+)+$/
    return reg.test(sEmail)
}

校验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

var reg = /^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/;

校验中文

var reg =/^[\\u4e00-\\u9fa5]{0,}$/;

由数字、26个英文字母或下划线组成的字符串

var reg = /^\\w+$/

校验身份证号码

// 15
var reg = /^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$/;

// 18
var reg2 = /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/;

校验金额

var reg = /^[0-9]+(.[0-9]{2})?$/;

校验手机号

下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)

var reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$/;

提取URL链接

var reg = /^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/;

提取Color Hex Codes

有时需要抽取网页中的颜色代码,可以使用下面的表达式。

var reg = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;

提取网页图片

假若你想提取网页中所有图片信息,可以利用下面的表达式。

var reg = /\\< *[img][^\\>]*[src] *= *[\\"\']{0,1}([^\\"\'\ >]*)/;

提取页面超链接

var reg = /(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\/\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>/;

查找CSS属性

var reg = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/

抽取注释

var reg = /<!--(.*?)-->/;
贡献者: mankueng