【JavaScript 学习--01】--正则篇

来源:互联网 发布:linux deploy官网 编辑:程序博客网 时间:2024/05/08 04:02

useful_link: http://www.manongjc.com/article/651.html
正则1:replace利用变量法

var curPatt = new RegExp('(\\w+?)(\\d+.*)');var newPatt = "xL";//handle datavar newData = _.map(data.results, function (d) {    d.branch = d.branch.toUpperCase().replace(curPatt, newPatt+"$2");    return d});

正则:replace中使用函数

也可以参考 JavaScript Reference Link of Replace
其中date的格式是四位数的年加“-”再加后面的符号,我想把year加+1,再合并后面的字符,返回。
var date = “2014-04”;
先要返回new date = “2015-04”;
代码如下:

var date = "2014-04";date = date.replace(/(\d{4})(-.*)/, function (match, p1, p2, offset, string) {    var tmp = parseInt(p1) + 1;    return tmp+p2;}),

这里写图片描述

正则:大写每个单词的第一个字母
How to capitalize first letter of each word on JS

var aa = "new feature tab you";function toTitleCase(str){    return str.replace(/\w\S*/g, function(txt){        console.log(txt); //->依次打印new, feature, tab, you        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});}console.log(toTitleCase(aa)); //New Feature Tab You
code in my real project!var name = link.replace(/.*name=(.*?)&.*/, "$1").replace("_", " ").replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});

这里写图片描述

正则2:获取符合条件的特定字符串

比如:想获取z数组中所有以lte开头后面紧跟只是一个数字的,并打印出该字符串以第一空格结束前的字符串。

var z = ["LTE23r.b world", "Lte33-- are right", "you33 changping", "you-are great", "zhou-", "lte3222 sdsfd lte0000"];        var regExpr = new RegExp('(^LTE\\d+.*?) ', "i");        z.forEach(function(d) {            var zz = d.match(regExpr);            console.log("%j",zz);            zz ? console.log(zz[1]) : "";        });

该表达式的打印结果如下:
这里match出来的结果是个list,其中list[0]是全表达式符合的字符,list[N]是符合第N个括号里表达式的字符。

%j ["LTE23r.b ", "LTE23r.b", index: 0, input: "LTE23r.b world"]LTE23r.b%j ["Lte33-- ", "Lte33--", index: 0, input: "Lte33-- are right"]Lte33--%j null%j null%j null%j ["lte3222 ", "lte3222", index: 0, input: "lte3222 sdsfd lte0000"]lte3222

正则三:关于在正则里面用变量方法

var patt = "Jason";var re =new RegExp("^\\d+" + patt + "$","i"); // re为/^\d+Jason$/i

另外,还有一种方法是用过eval动态执行一段字符串的方法,不过我觉得从各方面来说,都属下策。

var re = eval("/^\\d+" + patt + "$/i")

动态添加正则表达式:

var myStrs = ["hello23 world", "hello-- are right", "you33 changping", "you-are great", "zhou-"];var regPatts = ["hello", "you"];var regPatt = "";regPatts.forEach(function(d) { //structure patt via regPatts    if (d !=_.last(regPatts)) {        regPatt += "^" + d + "[-|\\d]|";    } else {        regPatt += "^" +d + "[-|\\d]"    }});var newRegPatt = new RegExp(regPatt, "i")myStrs.forEach(function(d) {    // var myResult = /(^hello-|^hello\d+)|(^you-|^you\d).+/i.test(d);    var myResult = newRegPatt.test(d);    console.log(myResult);//能打印"hello23 world", "hello-- are right", "you33 changping", "you-are great"});

在list里面添加多个正则表达式:

var VAILD_FEATURE_HEAD = [/LTE/i, /LBT/i, /CNI/i, /CNN/i, /CR/i];var VAILD_LEGACY =[new RegExp("legacy", "i"), new RegExp("regression", "i")];

之后可以利用$in 和$nin 在db里面查询:

tmpNewF1[featureType] = {$nin:VAILD_LEGACY};tmpNewF2[featureType] = {$in:VAILD_FEATURE_HEAD};myNewFeatureFilter["$and"].push(tmpNewF1);myNewFeatureFilter["$and"].push(tmpNewF2);
0 0
原创粉丝点击