首页 > string.replace()方法有问题,不知怎么解决

string.replace()方法有问题,不知怎么解决

 
var strM = "javascript is a good script language";
function change(word)
{
 return word.indexOf(0).toUpperCase()+word.substring(1);
}
alert(strM.replace(/\b\w+\b/g,change));//没有反应??蒙

第二个问题:希望“人”变成红色

var str="中华人民共和国,中华人民共和国";   
var newstr=str.replace(/(人)/g,$1.fontcolor("red")); //无反应? 
var newstr=str.replace(/(人)/g,"<font color=red>$1</font>");   //正确
 var newstr=str.replace(/人/g,"<font color=red>$1</font>");  // 中华$1民共和国,中华$1民共和国,想知道人为什么一定要在括号里才能正确替换??

前方高能量

replace 第二个参数为必需,且只能为字符串或者函数

如果替换字符串中含有$1等特殊字符串,会被相应捕获组替换掉。

要区别'$1'$1,前者是字符串,后者是变量!!!函数执行,要先对参数变量取值计算。

在这里$1是未定义的,必然会报错。

还有就是,报错了,要看报错信息。简单的问题,大家都能看明白。

复杂的问题你不提供报错信息,其他人无法回答问题。


先回复第一个问题。
replace方法无问题,是你写的函数不规范,错误的使用indexOf。
indexOf() 方法是返回某个指定的字符串值在字符串中首次出现的位置。
用法 stringObject.indexOf(searchvalue,fromindex)
searchvalue 必需。规定需检索的字符串值。
简而言之,word.indexOf(0)是要在目标字符串中找字符0的位置,很显然没有找到,返回-1. 数字使用toUpperCase(),产生了语法错误,而js语法错误,你懂的,无反应再正常不过了。

至于括号,这涉及到正则规则的问题,简单点,就是一个()代表1个字模式,$1,代表对第一个括号匹配到的内容的反向引用。


var strM = "javascript is a good script language";
function change(word)
{
 return word.charAt(0).toUpperCase()+word.substring(1);
}
alert(strM.replace(/\b\w+\b/g,change));


不单单对这个问题,如果程序行为与预期不同怎么办:
以你的问题为例,行为不一致的可能性有很多个点,比如alert, replace, 正则式, replace 回调函数。
首先,写一个你100%有把握的简单语句,
比如:alert('JavaScript ...')
如果没有问题,就排除了alert写错的可能。
然后,选择 一个 地方改变,
比如:alert('JavaScript...'.replace(/.*/, 'x')
如果仍然没有问题,改动下一个地方,直到找到错误,或者写出你想要的结果。

注意:
一次只改动一个地方,这样在出错的时候你就知道错在哪里
不要假定某处必然正确,不妨先试试看是否正确。有时候可能就是漏看了一个大小写之类的傻错误

【热门文章】
【热门文章】