# 判断是否为合法的 url

var strUrl= "^((https|http|ftp|rtsp|mms)?://)" +
               "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //ftp 的 user@ +
               "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP 形式的 URL- 199.194.52.184 +
               "|" // 允许 IP 和 DOMAIN(域名) +
               "([0-9a-z_!~*'()-]+\.)*" // 域名 - www. +
               "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名 +
               "[a-z]{2,6})" // first level domain- .com or .museum +
               "(:[0-9]{1,4})?" // 端口 - :80 +
               "((/?)|" // a slash isn't required if there is no file name +
               "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var urlDemo = new RegExp(strUrl); 
if(!urlDemo.test('www.baidu.com')) { 
    this.$toast("请输入正确的url!"); 
    return; 
}

# 匹配除了指定字符串的其他字符

// 一般来说,这种需求是通过这种方式来实现的
www\.(?!str)[^.]+\.com
// 其中 str 就是你要排除的字符串,如果要排除的有多个,那么
www\.(?!str1|str2|str3)[^.]+\.com

# 手机号格式化

当你需要将手机号码格式化成 xxx-xxxx-xxxx 的形式

const formatPhone = (str, sign = '-') => str.replace(/(\W|\s)/g, "").split(/^(\d{3})(\d{4})(\d{4})$/).filter(item => item).join(sign)
formatPhone('13123456789') // '131-2345-6789'
formatPhone('13 1234 56 789', ' ') // '131 2345 6789'

# 去除多余空格

当你需要将一段文本中的多个空格合并成一个空格

const setTrimOut = str => str.replace(/\s\s+/g, ' ')
const str = setTrimOut('hello,   jack') //

# 截断数字

当你需要将小数点后的某些数字截断而不取四舍五入

const toFixed = (n, fixed) => `${n}`.match(new RegExp(`^-?\d+(?:.\d{0,${fixed}})?`))[0]
toFixed(10.255, 2) // 10.25

# 字符串转对象

当你需要将一串字符串比如 '{name: "jack"}' 转换成对象时,直接使用 JSON.parse 将会报错。

const strParse = (str) => JSON.parse(str.replace(/(\w+)\s*:/g, (_, p1) => `"${p1}":`).replace(/\'/g, "\""))
strParse('{name: "jack"}')

# 颜色格式转换

当你需要将 16 进制的颜色转换成 rgb

const hexToRgb = hex => hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (_, r, g, b) => `#${r}${r}${g}${g}${b}${b}`).substring(1).match(/.{2}/g).map((x) => parseInt(x, 16));
hexToRgb('#00ffff'); // [0, 255, 255]
hexToRgb('#0ff'); // [0, 255, 255]