替换字符串中的字符

时间:2012-01-14 03:49:20

标签: javascript

为什么这对我不起作用?

<script type="text/javascript">
var gene="ATTAHATHHATTCGTA";
var i=0;
for (;i<gene.lenth;i++)
{
   if(gene[i]=='H')
     gene[i]='G';
}
</script>

我通过使用替换来改变它如下

<script type="text/javascript">
var gene="ATTAHATHHATTCGTA";
var i=0;
for (;i<gene.lenth;)
{
   var pos=gene.replace("H","G");
   i+=pos;
}
</script>
但是我还是运气不好。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

更简单地使用String.replace方法:

var gene="ATTAHATHHATTCGTA"; 
gene = gene.replace("H", "G", "g"); // The last "g" means "replace all occurrences"

这很简单。

但是,这不适用于所有浏览器。要使其可移植,您必须将第一个参数指定为正则表达式,如下所示:

var gene="ATTAHATHHATTCGTA"; 
gene = gene.replace(/H/g, "G"); // The /g means "replace all occurrences"

答案 1 :(得分:0)

这两个函数都将.length属性拼写错误为.lenth。但除此之外......

你的第一个函数不起作用的原因是因为并非所有的浏览器都支持对字符串中的单个字符进行数组样式的索引访问,即使是那些according to MDN的浏览器也只支持 read access。

第二个函数不起作用的原因是因为当你将一个字符串传递给.replace()时,它只会替换第一个实例并将它放在一个循环中并没有帮助。

您可以使用regular expression作为.replace() function的第一个参数轻松实现相同的功能,使用正则表达式可以指定其他参数,例如全局替换(或者您可以使用不区分情况替换):

gene = gene.replace(/H/g, "G");

如果由于某种原因你真的想要逐个字符地处理字符串,你可以很容易地将它变成一个带有.split() method的数组,然后当你完成后将它转回一个字符串.join() method

var gene="ATTAHATHHATTCGTA",
    i,
    geneArray = gene.split("");

for (i=0;i<geneArray.length;i++)
{
   if(geneArray[i]=='H')
     geneArray[i]='G';
}
gene = geneArray.join("");

(显然,当.replace()可以为你做这件事时,你不会这样做,但这只是一个例子。)