JS编程建议——37:推荐使用replace(2)

简介: 37:推荐使用replace(2)

建议37:推荐使用replace(2)
在上面的示例代码中,函数f()的参数为特殊字符“$1”,它表示正则表达式/(bw+b)/中小括号每次匹配的文本。然后在函数体内对这个匹配文本进行处理,截取其首字母并转换为大写形式,之后返回新处理的字符串。replace方法能够在原文本中使用这个返回的新字符串替换每次匹配的子字符串。
对于上面的示例,可以使用小括号来获取更多匹配文本的信息。例如,直接利用小括号传递单词的首字母,然后进行大小写转换处理:

  1. var s = 'script language = "javaScript" type= " text / javaScript"';
  2. var f = function($1,$2,$3){
  3. return $2.toUpperCase()+$3;
  4. }
  5. var a = s.replace( /b(w)(w*)b/g, f );
    //Script Language = "JavaScript" Type = " Text /JavaScript"

在函数f()中,第一个参数表示每次匹配的文本,第二个参数表示第一个小括号的子表达式所匹配的文本,即单词的首字母,第二个参数表示第二个小括号的子表达式所匹配的文本。
实际上,replace方法的第二个参数(函数式参数)不需要传递任何形参,replace方法依然会向它传递多个实参,这些实参都包含一定的意思,具体说明如下:
第一个参数表示与匹配模式相匹配的文本,如上面示例中每次匹配的单词字符串。
其后的参数是与匹配模式中子表达式相匹配的字符串,参数个数不限,根据子表达式数而定。
后面的参数是一个整数,表示匹配文本在字符串中的下标位置。
最后一个参数表示字符串自身。
例如,将上面示例中替换文本函数改为如下形式。

  1. var f = function(){
  2. return arguments[1].toUpperCase()+arguments[2];
  3. }
    如果不为函数传递形参,直接调用函数的arguments属性,同样能够读取到正则表达式中相关匹配文本的信息。

arguments[0]表示每次匹配的单词。
arguments[1]表示第一个子表达式匹配的文本,即单词的首字母。
arguments[2]表示第二个子表达式匹配的文本,即单词的余下字母。
arguments[3]表示匹配文本的下标位置,如第一个匹配单词“script”的下标位置就是0,依此类推。
arguments[4]表示要执行匹配的字符串,这里表示“script language = "javascript" type= " text / javascript"”。

  1. var s = 'script language = "javascript" type= " text / javascript"';
  2. var f = function(){
  3. for( var i = 0; i < arguments.length; i ++ ){
  4. alert("第"+(i+1)+"个参数的值:"+arguments[i]);
  5. }
  6. }
  7. var a = s.replace( /b(w)(w*)b/g, f );
    在函数体中,使用for循环结构遍历argumnets属性,每次匹配单词时,都会弹出5次提示信息,分别显示上面所列的匹配文本信息。其中,arguments[1]、arguments[2]会根据每次匹配文本不同,分别显示当前匹配文本中子表达式匹配的信息,arguments[3]显示当前匹配单词的下标位置。而arguments[0]总是显示每次匹配的单词,arguments[4]总是显示被操作的字符串。

例如,下面代码能够自动提取字符串中的分数,进行汇总后算出平均分,然后利用replace方法提取每个分值,与平均分进行比较以决定替换文本的具体信息。

  1. var s = "张三56分,李四74分,王五92分,赵六84分";
  2. var a = s.match( /d+/g ), sum = 0;
  3. for( var i= 0 ; i
  4. sum += parseFloat(a[i]);
};var avg = sum / a.length;function f(){var n = parseFloat(arguments[1]);return n + "分" + " ( " + (( n > avg ) ? ( "超出平均分" + ( n - avg ) ) :( "低于平均分" + ( avg - n ) )) + "分 ) ";}var ss1 = s.replace( /(d+)分/g, f );
alert( s1 );/ "张三56分(低于平均分20.5分),李四74分(低于平均分2.5分),王五92分(超出平均分15.5分), 赵六84分 ( 超出平均分7.5分)"/

在上面的示例中,遍历数组时不能够使用for in语句,因为这个数组中还存储着其他相关的匹配文本信息。应该使用for结构来实现。由于截取的数字都是字符串类型,所以应该把它们都转换为数值类型,否则会被误解,如把数字连接在一起,或者按字母顺序进行比较等。

相关文章
|
2月前
|
前端开发 JavaScript 开发者
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
探索JavaScript ES6的八种常见使用技巧:开启现代编程之旅
|
2月前
|
JavaScript 前端开发 开发者
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
|
4天前
|
JavaScript 前端开发 测试技术
在JS编程中常见的编程“套路”或习惯汇总
在当前技术圈快速迭代发展的时代,JavaScript是一种广泛应用于Web开发和移动应用开发的脚本语言,其重要性愈发凸显,尤其是随着技术的不断发展和应用场景的不断扩展,JS编程已经成为了许多开发者必备的技能之一。但是仅仅掌握JS语法和基本知识并不足够,为了写出高质量、可靠性和可维护性的代码,开发者需要掌握一些常见的编程"套路"或习惯,这些套路和习惯能够帮助开发者更好地组织和管理代码,提高开发效率,并减少潜在的错误和问题。在JS编程开发中,有一些常见的编程“套路”或习惯,可以帮助开发者编写高效、可维护且易于理解的代码。让我们来看看其中一些常见的编程“套路”或习惯。那么本文就来分享探讨在JS编程中
24 6
在JS编程中常见的编程“套路”或习惯汇总
|
6天前
|
JavaScript 前端开发 C语言
JavaScript编程语法练习
本篇文章是对于javaScript中if ,switch,while ,do-while,,for语法的作业练习.对于我来说也是对自己知识掌握的一种检验.是对js的基础语法进行的一次练习,通过有趣的示例进行练习,使得对于代码能够增加印象,对于知识的掌握更加透彻.
|
21天前
|
XML 存储 JavaScript
JavaScript的基本语法是编程的基础
【4月更文挑战第20天】JavaScript的基本语法是编程的基础
17 5
|
2月前
|
存储 JavaScript 编译器
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
这款国产中文编程火了!通过文言文编译生成Python、JS、Ruby代码!
|
2月前
|
JavaScript 前端开发
编程笔记 html5&css&js 079 JavaScript 循环语句
编程笔记 html5&css&js 079 JavaScript 循环语句
|
2月前
|
JavaScript 前端开发 开发者
编程笔记 html5&css&js 078 JavaScript 条件判断语句
条件判断语句是首先要接触的语句。通过条件判断来执行不同的代码块。
|
2月前
|
JavaScript 前端开发 编译器
编程笔记 html5&css&js 077 Javascript 关键字
编程笔记 html5&css&js 077 Javascript 关键字
|
2月前
|
JavaScript 前端开发
编程笔记 html5&css&js 076 Javascript 表达式
编程笔记 html5&css&js 076 Javascript 表达式