字符串的替换函数replace平常使用的频率非常高,format函数通常用来填补占位符。下面简单总结一下这两个函数的用法。

一、String.replace的两种用法

  replace的用法如:replace(regexp, string|fn);第一个参数都是正则表达式,第二个参数可以是要替换的字符串,也可以是带返回值的函数,它的功能就是拿第二个参数替换匹配的值。

  1.replace(regexp, string):我想把“乐小天”中的“小”替换成“大”,如下所示。

console.log("乐小天".replace(/小/g, "大"));//乐大天

//trim的实现方式
console.log(" 乐小天 ".replace(/(^\s+)|(\s+$)/g, ""));//乐小天

  2.replace(regexp, fn);fn这个回调函数可以有四种参数,第一种参数是匹配regexp的字符串;第二种为匹配regexp子表达式的字符串(有几个自表达式,顺延对应几个参数,如果没有子表达式,则第二个参数为第三种参数);第三种参数为regexp匹配字符串在字符串中的索引;第四种参数为当前调用replace的字符串。

  拿上面trim的实现为例,它的正则表达式包含两个子表达式:(^\s+)和(\s+$);所以回调函数应该有5个参数。当然,如果没有子表达式,则只有三种参数。

console.log("        乐小天    ".replace(/(^\s+)|(\s+$)/g,
function(match, matchChild1, matChild2, index, strObj){
console.log("match:" + match + ";");
console.log("matchChild1:" + matchChild1 + ";");
console.log("matChild2:" + matChild2 + ";");
console.log("index:" + index + ";");
console.log("strObj:" + strObj + ";");
return "";
}
));
/**
match: ;
matchChild1: ;
matChild2:undefined;
index:0;
strObj: 乐小天 ;
match: ;
matchChild1:undefined;
matChild2: ;
index:11;
strObj: 乐小天 ;
乐小天
*/

二、String.format的实现

  有的时候我们事先不知道字符串对应位置应该替换成什么,所以我们用占位符“{数字}”在字符串中进行预先占位,在真正确定的时候才将其替换掉。说白了就是将未知的替换字符封装成参数,让替换逻辑这个不变的部分与替换参数这个变化部分进行分离。

  1.format实现:

//扩展format
String.prototype.format = String.prototype.format || function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined' ? args[number] : match;
});
}; console.log("{0}是个{1}帅哥!".format('孙悟空', '大'));//孙悟空是个大帅哥!

  2.format替换字符在form校验中用到的比较多,比如前端UI框架MiniUI的校验对象VType是这么定义的:

mini.VTypes = {
minDateErrorText : "Date can not be less than {0}",
maxDateErrorText : "Date can not be greater than {0}",
...
};

  在返回错误信息的时候将对应的边界值替换掉“{0}”

  

  

String.replace与String.format的更多相关文章

  1. [转]String.Replace 和 String.ReplaceAll 的区别

    JAVA 中的 replace replaceAll 问题: 测试code System.out.println("1234567890abcdef -----> "+&qu ...

  2. JAVA中string.replace()和string.replaceAll()的区别及用法

    乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样.    public String r ...

  3. Java基础知识强化35:String类之String的其他功能

    1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...

  4. Java String 函数常用操作 & format() 格式化输出,代码详解

    package _String_; import java.util.*; import java.math.*; import java.lang.*; public class _Strings ...

  5. format not a string literal and no format arguments

    今天cocos2d-x打包 android的时候报错:format not a string literal and no format arguments 报错点是:__String::create ...

  6. string中Insert与Format效率对比、String与List中Contains与IndexOf的效率对比

    关于string的效率,众所周知的恐怕是“+”和StringBuilder了,这些本文就不在赘述了.关于本文,请先回答以下问题(假设都是基于多次循环反复调用的情况下):1.使用Insert与Forma ...

  7. Android studio2.2 ndk 错误 :format not a string literal and no format arguments!

    在Android Studio2.2 进行NDK编程,在对*char 字符串 进行日志输出时,报错: error: format not a string literal and no format  ...

  8. cocos2dx android版本移植时的Error format not a string literal and no format arguments解决方案

    原文地址 : http://www.cnblogs.com/hhuang2012/p/3336911.html cocos2dx android版本移植时的Error format not a str ...

  9. std::string stringf(const char* format, ...)

    std::string stringf(const char* format, ...){ va_list arg_list; va_start(arg_list, format); // SUSv2 ...

随机推荐

  1. windows 10 RelativePanel

    The new RelativePanel implements a style of layout that is defined by the relationships between its ...

  2. 跨域处理之Jsonp

    一.认识Jsonp JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式 ...

  3. iOS 添加字体

    1. 将字体(ttf 文件)导入项目. 2. 在项目plist 文件里的 Fonts provided by application 添加新导入的字体. 3. 代码中的调用 [aLabel setFo ...

  4. WPF WindowStyle为None

    当WindwoStyle为None时 窗口会出现边框,不会完全覆盖窗口 修改办法: 使用AllowsTransparency="True"即可

  5. POJ 2069 模拟退火算法

    Super Star Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6422   Accepted: 1591   Spec ...

  6. linux系统解决boot空间不足

    有时候更新Linux系统是会碰到boot空间不足的错误,原因基本上是安装时boot空间设置问题可以通过删除旧的内核来释放boot空间. ubuntu: 1.查看当前使用内核版本号       unam ...

  7. #PHP# 华为云 API 方式发送短信

    使用给华为云 消息 服务 API 方式发送短信 代码来自华为云,已通过测试 <?php /** * 华为云发送短信示例代码 * 本段代码需要使用自己的配置信息才能正常运行,出配置信息外,不需要改 ...

  8. [BZOJ5248][2018九省联考]一双木棋

    题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=5248   Solution 我们首先考虑放棋子的操作 发现它一定放棋子的部分是一个联通块 ...

  9. springboot项目:Redis缓存使用

    保存Redis 第一步:启动类中加入注解 @EnableCaching package com.payease; import org.springframework.boot.SpringAppli ...

  10. JWT的介绍解析

    JWT的介绍解析 一.什么是JWT?了解JWT,认知JWT 首先jwt其实是三个英语单词JSON Web Token的缩写.通过全名你可能就有一个基本的认知了.token一般都是用来认证的,比如我们系 ...