Js replace() 学习笔记
最近捣鼓着学习Js,发现replace()真的很有用,替换功能杠杠的棒。
接下来看看我遇到的问题:
有两个随机给出的字符串,字符串1'xxxxxx',字符串2'====T'(这两个用作示例,其他为随机),根据这两个字符串最后输出'ooooox'。后面会给出测试用例,大家就会明白。
刚开始遇到这个问题的时候我就想这就是合并两个字符串,顺带替换了字符串1。
var n=drone.length;
var l;
l=lamps.replace(/^(x){n}/,'o');
没错,这就是我开始的思路,以致于我后来死脑筋没转出来自己挖的坑,在替换过程中replace()被我丢弃了没使用。
然后开始动手填自己的坑,开始写方法。
第一种
function strOperate(lamps, drone){
console.log(lamps.length,drone.length);//打印两个字符串的长度
var str="",lamps;
//根据第二个字符串的长度先把要替换的'o'先保存在字符串中;
for(var i=0;i<drone.length;i++){
str+="o";
}
//数组操作
str=str.split("");
lamps=lamps.split("");
//两个字符串长度比较
var length=lamps.length<str.length?lamps.length:str.length;
for(var i=0;i<length;i++){
lamps[i]=str[i];
}
lamps=lamps.toString().replace(/,/g,"");//字符串替换,
console.log(lamps);
}
strOperate('xxxxxx', '====T')//输出 'ooooox'
这样一个方法写下来不知道浪费了多少时间,而且代码冗长,好悲伤呀。
后来细想,我为什么一定要把自己拴在替换字符串上面呢,可以换一种思路来,就有了以下的方法。
第二种
function flyBy(lamps, drone){
//转换为数组操作
var l=lamps.split("");
var d=drone.split("");
for(var i=0;i<d.length;i++){
//比较字符串长度大小
if(i<l.length){
l[i]='o';//直接赋值覆盖掉
}
}
console.log(l.join(""));//最后转换输出字符串
}
strOperate('xxxxxx', '====T')// 输出 'ooooox'
虽然这两个方法使用同样的原理,但是第二个方法简单明了而且可读性强,请认准第二个。
第三种使用replace()替换
function strOperate(lamps, drone){
var str;
if(drone.length>lamps.length){
str='o'.repeat(lamps.length)
}
str=lamps.replace('x'.repeat(drone.length),'o'.repeat(drone.length))
console.log(str);
}
strOperate('xxxxxx', '====T')// 输出 'ooooox'
//测试用例:
strOperate('xxxxxx', '====T')// 'ooooox'
strOperate('xxxxxxxxx', '==T')// 'oooxxxxxx'
strOperate('xxxxxxxxxxxxxxx', '=========T')// 'ooooooooooxxxxx'
strOperate('xxxx', '====T')// 'oooo'
方法写完了,最后还是要记下笔记的。(认真脸.png)
Replace()方法使用:
strObj.replace(regex/substr[,replacement]);
参数:
substr用一些字符串替换;
regex用一个正则表达式匹配的子串替换;
replacement为参数2,是需要替换的文本或函数;
在网上看到了一个有趣的说法,怎样在正则中传入变量,大家想一想是否跟普通的变量用加号拼接呢?
其实答案很简单,string.replace(new RegExp(key,'g'),"o");利用js的RegExp()对象就行了。
另外还有一些replace()特性没有说明,有兴趣的童鞋可以查查资料。
最后记下这些内容,来提示自己,期待下次提高。
~~~~~~~~~~~~~~~~~~2016/12/27 update~~~~~~~~~~~~~~~~~~
再来补充一下 replace()的回调函数使用!
replace() 方法的第二个参数 replacement 可以是函数,并且每个匹配到的元素都会调用该回调,最后返回的字符串作为替换使用。
先举个例子:
var string="Hello, I am Mr yt";
var str;
str=string.replace(/[^aeiou\s]\b/gi,function (s){
console.log(s);//string, m r b
return s==s.toLowerCase()?s+'err':s+'ERR';
})
console.log(str);//最后输出"Hello, I amerr Mrerr yterr"
备注:参数s为正则匹配到的子串,最后return的就是替换的子串。
对于有变量的正则replacement 函数有4(n+3)个参数,n为分组的个数;
其中的4个参数可以理解为:
function(m,v,i,s){}
m为匹配到的字符串,v为变量值,i为在原字符串中找到匹配元素的下标索引值,s为原字符串;
Js replace() 学习笔记的更多相关文章
- js再学习笔记
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...
- JS数组学习笔记
原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...
- Knockout.js快速学习笔记
原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...
- handlebars.js基础学习笔记
最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
- 两万字Vue.js基础学习笔记
Vue.js学习笔记 目录 Vue.js学习笔记 ES6语法 1.不一样的变量声明:const和let 2.模板字符串 3.箭头函数(Arrow Functions) 4. 函数的参数默认值 5.Sp ...
- 两万字Vue.js基础学习笔记(二)
Vue.js学习笔记(二) 4.模块化开发 ES6模块化的导入和导出 我们使用export指令导出了模块对外提供的接口,下面我们就可以通过import命令来加载对应的这个模块了 首先,我们需要在HTM ...
- Node.js API 学习笔记
常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...
- Js replace() 方法笔记
最近捣鼓着学习Js,发现replace()真的很有用,替换功能杠杠的棒. 接下来看看我遇到的问题: 有两个随机给出的字符串,字符串1'xxxxxx',字符串2'====T'(这两个用作示例,其他为随机 ...
随机推荐
- 【转】UML图与软件开发过程那点关系
首先,软工文档, 软工文档,也就是计划,设计,描述,使用软件的一些文件,它最大的特点就是固定不变,用来给不同的人和计算机来阅读.在期间,文档起到了桥梁的作用,看这张图很形象: 在这里在看一下国家统一规 ...
- Vue - 实例
1.实例属性介绍如下图所示: 具体介绍如下: A.$parent:访问当前组件的父实例 B.$root:访问当前组件的根实例,要是没有的话,则是自己本身 C.$children:访问当前组件实例的直接 ...
- LeetCode 1. Two Sum
Problem: Given an array of integers, return indices of the two numbers such that they add up to a sp ...
- unity3D项目中如何避免硬代码(C#)
平时做项目,代码中是不允许出现硬代码的,一般我们是怎么处理的呢? 那么硬代码又是什么呢? 我们俗称的硬代码:eg: label.text = "欢迎来到梦幻岛"; 这样我们俗 ...
- 第2章 新手必须掌握的Linux命令
第2章 新手必须掌握的Linux命令 章节简述: 本章节讲述系统内核.Bash解释器的关系与作用,教给读者如何正确的执行Linux命令以及常见排错方法. 经验丰富的运维人员可以恰当的组合命令与参数 ...
- .net core Jwt 添加
Jwt 已经成为跨平台身份验证通用方案,如不了解请关注:https://jwt.io/. 为了和微软其他验证模块有个比较好的衔接,项目中采用了微软开发的jwt组件: System.IdentityMo ...
- sql2000分享 批量建表dev_编号
批量建表dev_3970000000014到dev_3970000000035 declare @i bigint declare @j int ) ) ) ) set @sql = '' set @ ...
- VMware创建Linux虚拟机并安装CentOS(三)
选择“创建自定义布局”手动给Linux指定系统分区.交换分区,鼠标单击“下一步”按钮继续. 首先创建交Swap分区,鼠标单击“创建”按钮,在弹出的“生成存储”对话框中,生成分区选择“标准分区”:鼠标单 ...
- spring里的controller之间的跳转
未测试: this.getServletContext().getRequestDispatcher("/rentHouse.htm?method=display").forwar ...
- 在线图片压缩后以ImageIO 流的形式 设置大小显示指定页面
1.Servlet 代码 public class ZoomImgServlet extends HttpServlet implements Servlet { public void init ...