正则表达式案例大汇总

单词首字母大写

var str = 'my name is zhu-feng-pei-xun,i am 8 years old,i am qian duan pei xun no1!';
//var reg = /w+/g; //=>代表的是边界:单词左右两边是边界,-的左右两边也是边界,
所以这里会把 'zhu-feng-pei-xun' 算作四个单词(我们想把它当做一个)

//=>1、先把混淆边界符的中杠替换为下划线
str = str.replace(/-/g, '_');

//=>2、通过边界符匹配到每一个单词
str = str.replace(/(w)(w*)/g, function () {
    return arguments[1].toUpperCase() + arguments[2];
});

//=>3、在把之前替换的下划线重新赋值为中杠
str = str.replace(/_/g, '-');
console.log(str);


时间字符串格式化

/*
 * 思路一:字符串拆分法
 *   先按照空格把字符串拆成两部分  str.split(' ') => ['2017-11-07','16:37:00']
 *   再把上面数组中的第一项和第二项分别获取到
 *      str1='2017-11-07'
 *      把这个字符串按照-拆  str1.split('-') =>['2017','11','07']
 *      str2='16:37:00'
 *      把这个字符串按照:拆  str2.split(':') =>['16','37','00']
 *   最后把两个数组中的每一项按照指定格式拼接成为新的字符串
 */

/*
 * 思路二:使用日期数据完成操作
 *   首先把str变为标准的日期格式数据 new Date(str) =>Tue Nov 07 2017 16:37:00 GMT+0800 (中国标准时间)
 *   在IE浏览器中需要把原始字符串中的-替换为/才可以转换 str.replace(/-/g,'/')
 *
 *  使用Date类中提供的方法:
 *    getFullYear、getMonth、getDate、getHours、getMinutes、getSeconds...获取到年、月、日、小时、分钟、秒,
 最后拼接成我们需要的数据
 */
var str = '2017-11-07 16:37:00';
//=>'2017年11月07日 16时37分00秒'

//=>使用正则实现
//1、执行一次捕获操作,得到需要的六个结果
var reg = /^(d{4})-(d{1,2})-(d{1,2})s+(d{1,2}):(d{1,2}):(d{1,2})$/g;
// str = str.replace(reg, function () {
//     var arg = arguments;
//     return arg[1] + '年' + arg[2] + '月' + arg[3] + '日 ' + arg[4] + '时' + arg[5] + '分' + arg[6] + '秒';
// });
str = str.replace(reg, '$1年$2月$3日 $4时$5分$6秒');//=>$1等价于第一个分组中获取的内容,类似于上面代码的arg[1]
console.log(str);//=>'2017年11月07日 16时37分00秒'
var str = '2017-11-07 16:37:00';
var reg = /d+/g,
    ary = str.match(reg);//=>["2017", "11", "07", "16", "37", "00"]

var template = '{0}年{1}月{2}日 {3}时{4}分{5}秒';
//=>{0} ->ary[0] ->2017
//=>{1} ->ary[1] ->11
//=>...
//=>我们首先获取模板中的{n}(同时获取数字n),把数字n作为ary的索引,获取到需要的日期数据,把获取的日期数据整体替换{n}即可
template = template.replace(/{(d+)}/g, function () {
    var index = arguments[1],
        value = ary[index];
    return value;
});
console.log(template);
String.prototype.myFormatTime = function myFormatTime() {
    var ary = this.match(/d+/g),
        template = arguments[0] || '{0}年{1}月{2}日 {3}时{4}分{5}秒';
    template = template.replace(/{(d+)}/g, function () {
        var value = ary[arguments[1]] || '0';
        value.length < 2 ? value = '0' + value : null;
        return value;
    });
    return template;
};

// var str = '2017-11-07';
// str = str.myFormatTime();
// console.log(str); //=>'2017年11月07日 00时00分00秒'

// var str = '2017-11-07';
// str = str.myFormatTime('{1}-{2} {3}:{4}');
// console.log(str);

// var str = '2017-11-07 17:48:3';
// str = str.myFormatTime('{3}:{4}:{5}');
// console.log(str);

var str = '2017-11-07 17:48:3';
str = str.myFormatTime();
console.log(str);


去除字符串首尾空格

String.prototype.myTrim = function myTrim() {
    return this.replace(/^s+|s+$/g, '');
};


var str = '    珠峰 培训   ';
// console.log(str.trim());
// console.log(str.trimLeft());
// console.log(str.trimRight());
// str = str.replace(/^s+|s+$/g, '');
// console.log(str);

console.log(str.myTrim());


URL地址栏问号传参值的解析

String.prototype.myQueryURLParameter = function myQueryURLParameter() {
    var obj = {};
    this.replace(/([^?&=#]+)=([^?&=#]+)/g, function () {
        obj[arguments[1]] = arguments[2];
    });
    this.replace(/#([^?=&#]+)/g, function () {
        obj['HASH'] = arguments[1];
    });
    return obj;
};
var url = 'http://www.zhufengpeixun.cn/stu/index.html?name=zxt&age=28&sex=0#teacher';
//=>{name:'zxt',age:28,sex:0,HASH:'teacher'}
console.log(url.myQueryURLParameter());