当前位置:   article > 正文

replace中的正则_ts replace

ts replace

replace中的正则

replace:把原有的字符替换成新的字符

1. replace的字符串替换

var str = 'pku2016pku2017';
str = str.replace('pku', 'pkusoft');
console.log(str); // pkusoft2016pku2017
  • 1
  • 2
  • 3

在不使用正则的情况下,每次执行只能替换一个字符,每次执行都是从0开始替换,有重复的,无法全部替换

2. replace的正则的替换

str = str.replace(/pku/g, 'pkusoft'); // 使用正则的全局匹配
console.log(str); // pkusoftsoft2016pkusoft2017
  • 1
  • 2

首先和exec捕获一样,把所有和我们匹配正则的都捕获到,然后把捕获的内容替换成我们需要替换的新内容。
/pku/g按照这个正则把str中所有可以匹配的都捕获到,然后统一都替换成’pkusoft’

replace第二个参数若是一个函数
1. 匿名函数执行多少次,取决于正则能在字符串中捕获多少次
2. 每次执行匿名函数,arguments值和通过exec捕获到的内容很类似
3. return 返回值就是需要去替换的内容
str = str.replace(/pku/g, function () {
 console.log(arguments);
 // 第一次执行:  ["pku", 0, "pku2016pku2017"]
 // 第一次执行:  ["pku", 7, "pku2016pku2017"]
 // 返回的数组和执行exec返回的结果一致
 return 'pkusoft';
});
console.log(str); // pkusoftsoft2016pkusoft2017
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
replace的分组捕获
str = str.replace(/(\d+)/g, function () {
  // console.log(arguments);
  // 第一次执行:  ["2016", "2016", 7, "pkusoft2016pkusoft2017"]
  // 第一次执行:  ["2017", "2017", 18, "pkusoft2016pkusoft2017"]
  // 返回的数组和执行exec返回的结果一致
return '0000';
});
console.log(str); // pkusoft0000pkusoft0000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

replace的应用

阿拉伯数字转化为中文数字

var str = '20171001';
var arr = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
str = str.replace(/\d/g,function () {
  var num = arguments[0]; // 把捕获的内容,作为数组的下标
  return arr[num];
});
console.log(str); // 贰零壹柒壹零零壹
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

查找出现最多的字符,并显示个数

var str = 'asdfasdfasdferqehthr';
var obj = {};
var maxNum = 0;
var arr = [];
str.replace(/[a-z]/gi, function () {
var val = arguments[0];
obj[val] >= 1 ? obj[val] += 1 : obj[val] = 1;
});
for (var key in obj) {
obj[key] > maxNum ? maxNum = obj[key] : null;
obj[key] === maxNum ? arr.push(key) : null;
}
console.log("出现字符串最多的字符是: " + arr.toString() + " 出现了 " + maxNum + " 次"); // 出现字符串最多的字符是: a,s,d,f 出现了 3 次
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

获取url中的参数

var str = 'http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=sport';
// replace 方法
var reg = /([^?=&]+)=([^?=&]+)/g;
var obj = {};
str.replace(reg, function () {
  obj[arguments[1]] = arguments[2];
});
console.log(obj); // {cl: "2", rn: "20", tn: "news", word: "sport"}
// exec 方法
var res = reg.exec(str);
while (res) {
  obj[res[1]] = res[2];
  res = reg.exec(str);
}
console.log(obj); // {cl: "2", rn: "20", tn: "news", word: "sport"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

格式化时间

String.prototype.myFormateTime = function () {
  // 2017-10-21 11:08:19
  // ?:表示匹配不捕获
  var reg = /^(\d{4})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:\s+)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})(?:-|\/|\.|:)(\d{1,2})$/g;
  var arr = [];
  this.replace(reg, function () {
    arr = (Array.prototype.slice.call(arguments)).slice(1, 7)
  });
  var format = arguments[0] || "{0}年{1}月{2}日 {3}:{4}:{5}";
  return format.replace(/{(\d+)}/g, function () {
    var val = arr[arguments[1]];
    return val.length === 1 ? "0" + val : val;
  })
}
var str = "2017/10/21 11:08:19";
console.log(str.myFormateTime()); // 2017年10月21日 11:08:19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/212294
推荐阅读
相关标签
  

闽ICP备14008679号