如何使用.replace()和.substring()修复完全不同的输出?

时间:2019-01-10 16:55:50

标签: javascript string

我刚刚创建了一个脚本,该脚本在理论上将“ 9”替换为“ Nein”(无种族主义意图),并且输出的结果与预期的完全不同。

不是打印“ Nein Nein Nein”,而是输入“ 999”,而是打印“ undefined Nein 99 Nein 9”。

var inputString;
var outputString;

function submit() {
    inputString = document.getElementById('input').value;
    for (i = 0; i <= inputString.length; i++) {
        outputString += inputString.replace(9, ' Nein ');
        document.getElementById('outputP').innerHTML = outputString;
        inputString = inputString.substring(1);
    }
}

5 个答案:

答案 0 :(得分:0)

您可以使用正则表达式

function submit() {
    inputString = document.getElementById('input').value;
    outputString = inputString.replace(/9/g, ' Nein');
    document.getElementById('outputP').innerHTML = outputString;
}
<input id='input' />

<button onclick="submit()">submit</button>

<div id='outputP'></div>

答案 1 :(得分:0)

第一个问题是您要在for循环中重新定义inputString

我不清楚您打算如何重新定义inputString,但是这里有一个使用replace方法执行您想要的示例。我认为您以for循环结尾的原因是因为您错过了/g标志:

const inputString = '999';
console.log(inputString.replace(/9/g, ' Nein '));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

答案 2 :(得分:0)

outputString未初始化,因此为undefined。因此,第一个串联将使用字符串值undefined"undefined"完成。

您可以使用简单的正则表达式来完成工作,而不必遍历字符串并一一替换:

function nineToNein(input){
  return input.replace(/9/g, " Nein ");
}

答案 3 :(得分:0)

如果您打算循环播放,我建议您在循环中使用迭代器并逐个字符进行替换。

var inputString;
var outputString = '';

function submit() {
    inputString = document.getElementById('input').value;
    for (let i = 0; i < inputString.length; i++) {
        outputString += inputString[i].replace(9, ' Nein ');
    }
    
    document.getElementById('outputP').innerHTML = outputString;
}

submit();
<input id="input" value="999" />
<p id="outputP"></p>

答案 4 :(得分:0)

您应该使用inputString [index]。

    var inputString = "999";
    var outputString = "";
    var n = inputString.length;
    for(var i = 0; i< n; i++) {
    	outputString += inputString[i].replace(9, ' Nein ');
    }
    console.log(outputString);