2017-09-01 89 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'));