2012-01-14 4 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

Awesome, спасибо Джон, я изучаю новый г сегодня. – Mackintoast

+0

И есть орфографическая ошибка: "для (; г

+0

@Mackintoast: Пожалуйста, проверьте редактирование I только что сохраненный, в отношении регулярного выражения. – Jon

0

Обе функции имеют свойство .length с орфографической ошибкой, как .lenth. Но помимо этого ...

Причина, по которой ваша первая функция не работает, заключается в том, что не все браузеры поддерживают доступ к индексу типа массива для отдельных символов в строках, и даже для тех, которые делают according to MDN, они поддерживают только доступ.

Причина, по которой вторая функция не работает, заключается в том, что когда вы передаете строку в .replace(), она заменит только первый экземпляр и помещает его в цикл, это не поможет.

Вы можете легко достичь того же, используя regular expression в качестве первого параметра .replace() function, где использование регулярных выражений позволяет указать дополнительные параметры, такие как глобальное заменить (или вы можете сделать это случай insensitve заменить):

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() может сделать это для вас, но это всего лишь пример.)