2012-01-14 14 views
-1

なぜ私にとってはうまくいかないのですか?文字列内の文字を置換する

<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

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" 
+0

素晴らしい、おかげでジョン、私は今日、新しいグラムを学びます。 – Mackintoast

+0

そして、スペルの間違いがあります: "については、(;私はgene.lenthを<;)" はする必要があります "について(;私はgene.length <;)" –

+0

@Mackintoastを編集をチェックしてみて下さいI正規表現に関してはちょうど救われました。 – Jon

0

両機能.lenthとしてスペルミス.length性質を持っています。しかし、すべてのブラウザでは、文字列内の個々の文字の配列形式のインデックスへのアクセスをサポートしているのでそれはさておき...あなたの最初の機能は動作しません

理由がある、とさえaccording to MDNを行うもののために、彼らは唯一の読み取りをサポートアクセス。

2番目の関数が機能しない理由は、文字列を.replace()に渡すと、最初のインスタンスのみが置き換えられ、ループに入れてもそれが役に立ちません。

あなたは簡単に正規表現の使用は、あなたがそのようなグローバル置き換える(またはあなたがそれ置き換えるinsensitveケース作ることができる)などの追加パラメータを指定することができます.replace() functionへの最初のパラメータとしてregular expressionを使用して同じことを達成することができます

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

何らかの理由であなたは本当にあなたが.join() methodと文字列に戻ってターンを終了したら、あなたは簡単に、その後.split() 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()はあなたのためにそれを行うことができ、そのようにしないだろうが、それは単なる一例です。)

関連する問題