javascript中replace使用总结
ECMAScript提供了replace()方法。这个方法接收两个参数,第一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数。现在我们来详细讲解可能出现的几种情况。
1. 两个参数都为字符串的情况
var text = 'cat, bat, sat, fat';
// 在字符串中找到at,并将at替换为ond,只替换一次
var result = text.replace('at', 'ond');
// "cond, bat, sat, fat"
console.log(result);
2. 第一个参数为RegExp对象,第二个参数为字符串
我们可以发现上面这种情况只替换了第一个at,如果想要替换全部at,就必须使用RegExp对象。
var text = 'cat, bat, sat, fat';
// 使用/at/g 在全局中匹配at,并用ond进行替换
var result = text.replace(/at/g, 'ond');
// cond, bond, sond, fond
console.log(result);
3. 考虑RegExp对象中捕获组的情况。
RegExp具有9个用于存储捕获组的属性。$1, $2...$9,分别用于存储第一到九个匹配的捕获组。我们可以访问这些属性,来获取存储的值。
var text = 'cat, bat, sat, fat';
// 使用/(.at)/g 括号为捕获组,此时只有一个,因此所匹配的值存放在$1中
var result = text.replace(/(.at)/g, '$($1)');
// $(cat), $(bat), $(sat), $(fat)
console.log(result);
4. 第二个参数为函数的情况,RegExp对象中不存在捕获组的情况。
var text = 'cat, bat, sat, fat';
// 使用/at/g 匹配字符串中所有的at,并将其替换为ond,
// 函数的参数分别为:当前匹配的字符,当前匹配字符的位置,原始字符串
var result = text.replace(/at/g, function(match, pos, originalText) {
console.log(match + ' ' + pos);
return 'ond'
});
console.log(result);
// 输出
/*
at 1 dd.html:12:9
at 6 dd.html:12:9
at 11 dd.html:12:9
at 16 dd.html:12:9
cond, bond, sond, fond dd.html:16:5
*/
5. 第二个参数为函数的情况,RegExp对象中存在捕获组的情况。
var text = 'cat, bat, sat, fat';
// 使用/(.at)/g 匹配字符串中所有的at,并将其替换为ond,
// 当正则表达式中存在捕获组时,函数的参数一次为:模式匹配项,第一个捕获组的匹配项,
// 第二个捕获组的匹配项...匹配项在字符串中的位置,原始字符串
var result = text.replace(/.(at)/g, function() {
console.log(arguments[0] + ' ' + arguments[1] + ' ' + arguments[2]);
return 'ond'
});
console.log(result);
// 输出
/*
cat at 1
bat at 6
sat at 11
fat at 16
cond, bond, sond, fond
*/
以上为replace方法的所有可以使用的情况,下面我们使用replace和正则表达式共同实现字符串trim方法。
(function(myFrame) {
myFrame.trim = function(str) {
// ' hello world '
return str.replace(/(^\s*)|(\s*$)/g, '');
};
window.myFrame = myFrame;
})(window.myFrame || {});
// 测试
var str = ' hello world '
console.log(str.length); //
console.log(myFrame.trim(str).length); //
javascript中replace使用总结的更多相关文章
- JavaScript 中 replace方法 替换所有字符串
需要替换一个字符串中所有的某个字符串 java中使用replaceAll()方法就可以了.但是JavaScript中没有replaceAll方法 但是可以通过以下方法实现: /** * 空格替换为下划 ...
- Javascript中replace()的一些用法总结
关于定义 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 关于语法 stringObject.replace(regexp/substr,repla ...
- JavaScript中replace()方法的第二个参数解析
语法 string.replace(searchvalue,newvalue) 参数值 searchvalue 必须.规定子字符串或要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则 ...
- 第179天:javascript中replace使用总结
ECMAScript提供了replace()方法.这个方法接收两个参数,第一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数.现在我们来详细讲解可能出现的几种情况 ...
- javascript中replace( )方法的使用——有博主已经讲过了,但里面有一小丢丢知识错误,挺重要的部分,我就重提下,以免初学者弄错
阿里面试题:说出以下函数的作用是?空白区域应该填写什么? 其实这个问题http://www.phpstudy.net/b.php/105983.html解释的已经非常好了,思路也很顺,容易理解,本文将 ...
- JavaScript的replace方法与正则表达式结合应用讲解
大家好!!今晚在华软G43*宿舍没什么事做,把javascript中replace方法讲解一下,如果讲得不对或不合理是情理之中的事,因为我不是老鸟,也不是菜鸟,我也不知道我当底是什么鸟??呵~~ re ...
- javascript中通过replace函数搜索和替换指定字符串
javascript中我们可以通过replace函数替换部分字符串为指定字符串,本文展示了replace的详细用法,并且通过范例演示了如何进行部分替换.完整替换和不区分大小写替换. javascrip ...
- JavaScript中String对象的match()、replace() 配合正则表达式使用
正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时, ...
- 来一轮带注释的demo,彻底搞懂javascript中的replace函数
javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...
随机推荐
- Jenkins的新建job和配置job
这里,我们说一下如何新建并且配置一个job,Jenkins的工作其实有很多都是靠job来完成的,job有很多的功能,这里我们只介绍如何新建和配置一个建构项目的job. 新建job 新 ...
- css中的text-overflow
css中的text-overflow HTML中: <body><div class="clip">此处中多余的文字直接被切掉,不显示</div> ...
- Azure 基础:使用 powershell 创建虚拟网络
什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...
- PHP 用session与gd库实现简单验证码生成与验证的类
验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的.目前大大小小的网站都有验证码.今天自己实现了一个简单的验证码类.说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下.当然,因为 ...
- EFcore与动态模型
在开发商城系统的时候,大家会遇到这样的需求,商城系统里支持多种商品类型,比如衣服,手机,首饰等,每一种产品类型都有自己独有的参数信息,比如衣服有颜色,首饰有材质等,大家可以上淘宝看一下就明白了.现在的 ...
- Github网站加载不完全,响应超时,如何解决
Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.毫不夸张地说,高效利用Github是一个优秀的程序员必备的基本素质.可是,有的用户在打开 ...
- C# .NET更智能的数据库操作的封装完整版(重构)
前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天我重构了新的框架,我觉得我写的可以称得上框架,为什么?请大 ...
- SQL SERVER 事务日志 解析
1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行 ...
- STL_deque双端队列
deque:元素数据采用分块的线性结构存储.若干线性存储块成为deque块.一般大小为512字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数. 所有的deque块使用一个Ma ...
- Protobuf学习 - 入门
古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 -- 苏轼·<晁错论> 从公司的项目源码中看到了这个东西,觉得挺好用的,写篇博客做下小总结.下面的操作以C++为编程语言,protoc的版 ...