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'(这两个用作示例,其他为随机 ...
随机推荐
- hellocharts的折线图与柱状图的结合之ComboLineColumnChartView
哼哼,网上找了半天都不全,所以决定自己写一个完整的可以直接贴代码的 test.xml <?xml version="1.0" encoding="utf-8&quo ...
- 转:解决apache的the requested operation has failed
运行->cmd 进入到apache的bin目录.输入httpd.exe -w -n "Apache" -k start 可查看原因
- Node使用multiparty包上传文件
var multiparty = require('multiparty'); var http = require('http'); var util = require('util'); var ...
- java微信公众号开发----搭建ngrok环境
下载ngrok,一个能够在公网安全访问内网Web主机的工具 下载地址:http://download.csdn.net/download/u014252425/9389847,亲测可用 下载完成后,进 ...
- sql中查询中的when...then 语句
),jbrq, ),'/','-')as jbrq, ' then '启用' when ' then '未启用' else '修改' end cbzt,shzt from jc_yscbfxb sel ...
- js 逻辑或
逻辑或操作符由两个竖线来表示||,属于短路操作符,也就是说,如果第一个操作数的求职结果为true,就不会对第二个操作数进行求值 var found = true; var result = found ...
- 在HTML中使用JavaScript元素
script属性<script async = async charset="utf-8" defer="defer" src="index.h ...
- 解决svn uuid变更问题
简介: 今天在snv根目录下重新定位上传的url,更改后出现如下错误 .可以看到,原来Repository创建者的uuid是前者,而现在我操作的是后者的uuid.因此,目前的操作办法是 使用相关命令更 ...
- ZooKeeper个人笔记客户端watcher和AsycCallback回调
每一个Watcher具有如下属性: 1.KeeperState 2.EventType 3.path 4.process(WatchedEvent evnet)回掉方法 Watcher干嘛的?用户监听 ...
- Ajax跨域问题的两种解决方法
浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决. 1.在请求页面上使用Access-Control-Allow-Origin标头. 使用如下标头可以接受全部网站请求: ...