2017-09-01 104 views
1

我有一個JavaScript代碼,它是一個名爲「x」的變量,其值爲「Hello World」。還有另外兩個名爲「舊」和「新」的變量。我想要的是當我給變量「舊」的一個隨機值和變量「新」的新值時。然後,我需要該程序來查找和替換句子中的相似字符並添加新值。在Javascript中查找和替換字符

例如:old =「l」,new =「y」,新語句需要變成「Heyyo World」,用'y'代替'l'字母。

以下是我的示例代碼。

<script type="text/javascript"> 
 
function fndReplace() 
 
{ 
 
    var x = "Hello world"; 
 
    var old = "l"; 
 
    var neww = "y"; 
 
    var i; 
 

 
    var length = x.length; 
 
    for(i=0;i<length-1;i++) 
 
    { 
 
     if(old[i] == neww) 
 
     { 
 
      old = old[i] + neww 
 
     } 
 
    } 
 
    
 
    document.write(old); 
 
} 
 

 
    fndReplace(); 
 
    
 
</javascript>

+0

的可能的複製[如何更換在JavaScript字符串的所有出現?(https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences -of-a-string-in-javascript) – emed

+1

爲什麼不能替換''world''中的''l''? –

回答

0

字符串是在Javascript不變。您需要對已更改內容的變量進行新的分配。

您可以使用String#replace直接替換模式。

function fndReplace(string, o, n) { 
 
    return string.replace(new RegExp(o, 'g'), n); 
 
} 
 

 
console.log(fndReplace('Hello world', 'l', 'y'));

如果你喜歡變異單個字母索引,你可以分割字符串,改變陣列。更改後,您可以將數組連接到新的字符串。

function fndReplace(string, o, n) { 
 
    var letters = string.split(''), 
 
     i, 
 
     length = letters.length; 
 

 
    for (i = 0; i < length; i++) { 
 
     if (letters[i] === o) { 
 
      letters[i] = n; 
 
     } 
 
    } 
 
    return letters.join(''); 
 
} 
 

 
console.log(fndReplace('Hello world', 'l', 'y'));

ES6與spread syntax ...Array#map

function fndReplace(string, o, n) { 
 
    return [...string].map(c => c === o ? n : c).join(''); 
 
} 
 

 
console.log(fndReplace('Hello world', 'l', 'y'));

+0

該死的你,爲什麼你編輯;)我已經寫了answear :) – Daredzik

1

JavaScript是一種功能性langauage,所以如果這是沒有必要的for結構氣餒。實際上,String庫中有一個預構建函數部分可以實現此目標:String.prototype.replace()

尼娜的回答是好,如果你想使用for,但這裏的另一種方式來做到這一點:

var xArr = x.split(''); 
 
xArr.forEach(function(e, index) { 
 
    if(e === old) { 
 
    xArr[index] = neww; 
 
    } 
 
}); 
 
x = xArr.join('');

0

如果你不想使用String.replace()你可以做一個漂亮的小功能Array.map()Array.join()。可能會更好String.split()而不是在字符串上調用地圖,但如果您打高爾夫球,它會削減1個字符。

let findReplace = (x, y, z) => [].map.call(x, c => c === y ? z : c).join(''); 
 
console.log(findReplace('Hello world', 'l', 'y'));