js mysql替换_JS字符串替换

replace() 方法的第二个参数可以使用函数,当匹配时会调用该函数,函数的返回值将作为替换文本使用,同时函数可以接收以$为前缀的特殊字符,用来引用匹配文本的相关信息。

示例1

下面代码把字符串中每个单词转换为首字母大写形式显示。

var s = 'javascript is script , is not java.'; //定义字符串

//定义替换文本函数,参数为第一个子表达式匹配文本

var f = function ($1) {

//把匹配文本的首字母转换为大写

return $1.substring(0,1).toUpperCase() + $1.substring(1).toLowerCase();}

var a = s.replace(/(\b\w+\b)/g, f); //匹配文本并进行替换

console.log(a); //返回字符串“JavaScript Is Script , Is Not Java.”

在上面示例中替换函数的参数为特殊字符“$1”,它表示正则表达式 /(\b\w+\b)/ 中小括号匹配的文本,然后在函数结构内对这个匹配文本进行处理,截取其首字母并转换为大写形式,余下字符全为小写,然后返回新处理的字符串。replace() 方法是在原文本中使用这个返回的新字符串替换掉每次匹配的子字符串。

示例2

对于上面的示例还可以进一步延伸,使用小括号来获取更多匹配信息。例如,直接利用小括号传递单词的首字母,然后进行大小写转换处理,处理结果都是一样的。

var s = 'javascript is script , is not java.'; //定义字符串

var f = function ($1,$2,$3) { //定义替换文本函数,请注意参数的变化

return $2.toUpperCase() + $3;

}

var a = s.replace(/(\b\w+\b)/g, f);

console.log(a);

在函数 f() 中,第一个参数表示每次匹配的文本,第二个参数表示第一个小括号的子表达式所匹配的文本,即单词的首字母,第二个参数表示第二个小括号的子表达式所匹配的文本。

replace() 方法的第二个参数是一个函数,replace() 方法会给它传递多个实参,这些实参都包含一定的意思,具体说明如下。

第一个参数表示与匹配模式相匹配的文本,如上面示例中每次匹配的单词字符串。

其后的参数是与匹配模式中子表达式相匹配的字符串,参数个数不限,根据子表达式数而定。

后面的参数是一个整数,表示匹配文本在字符串中的下标位置。

最后一个参数表示字符串自身。

示例3

把上面示例中替换文本函数改为如下形式。

var f = function() {

return arguments[1].toUpperCase() + arguments[2];

}

也就是说,如果不为函数传递形参,直接调用函数的 arguments 属性同样能够读取到正则表达式中相关匹配文本的信息。其中:

arguments[0]:表示每次匹配的文本,即单词。

arguments[1]:表示第一个子表达式匹配的文本,即单词的首个字母。

arguments[2]:表示第二个子表达式匹配的文本,即单词的余下字母。

arguments[3]:表示匹配文本的下标位置,如第一个匹配单词“javascript”的下标位置就是0,以此类推。

arguments[4]:表示要执行匹配的字符串,这里表示“javascript is script , is not java.”。

示例4

下面代码利用函数的 arguments 对象主动获取 replace() 方法的第一个参数中正则表达式所匹配的详细信息。

var s = 'javascript is script , is not java.'; //定义字符串

var f = function () {

for (var i = 0; i < arguments.length; i++) {

console.log("第" + (i + 1) + "个参数的值:"+ arguments[i]);

}

console.log("-----------------------------");

}

var a = s.replace(/(\b\w+\b)/g, f);

在函数结构体中,使用 for 循环结构遍历 arguments 属性时,发现每次匹配单词时,都会弹出 5 次提示信息,分别显示上面所列的匹配文本信息。其中,arguments[1]、arguments[2] 会根据每次匹配文本的不同,分别显示当前匹配文本中子表达式匹配的信息,arguments[3] 显示当前匹配单词的下标位置。而 arguments[0] 总是显示每次匹配的单词,arguments[4] 总是显示被操作的字符串。

示例5

下面代码设计从服务器端读取学生成绩(JSON格式),然后使用 for 语句把所有数据转换为字符串。再来练习自动提取字符串中的分数,并汇总、算出平均分。最后,利用 replace() 方法提取每个分值,与平均分进行比较以决定替换文本的具体信息。

var scope = {

"张三" : 56,

"李四" : 76,

"王五" : 87,

"赵六" : 98

}, _scope = "";

for (var id in scope) { //把JSON数据转换为字符串

_scope += id + scope[id];

}

var a = _scope.match(/\d+/g), sum = 0; //匹配出所有分值,输出位数组

for (var i = 0; i

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 s1 = _scope.replace(/(\b\w+\b)/g, f); //执行匹配、替换操作

document.write(s1);

运行结果如下:

54ff52d1ad1c684f268bdf4f77243107.gif

遍历数组时不能使用 for/in 语句因为数组中还存储有其他相关的匹配文本信息。应该使用 for 结构来实现。由于截取的数字都是字符串类型,应该把它们都转换为数值类型,再把数字连接在一起,或者按字母顺序进行比较等。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值