替换重复的字符不起作用

时间:2016-04-23 12:28:28

标签: javascript arrays

当我把" 123"将值转换为输入字段,它将正确转换为字母" ABC",但是当我键入" 112"它只转换第一个这样的数字" A1B"我需要" 112"转换为" AAB"。但是,重复的字符不会被替换。



 TypeError: Cannot read property 'clients' of undefined

function char_convert() {
  var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
  var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];

  for (x = 0; x < chars.length; x++) {
    for (i = 0; i < arguments.length; i++) {

      arguments[i].value = arguments[i].value.replace(chars[x], codes[x]);
    }
  }
}

char_convert(this);
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:5)

您可以拆分值并在其上循环并替换必要的值。

var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];

function char_convert(el) {

  el.value = el.value.split("").map(function(c) {
    return codes[chars.indexOf(c)];
  }).join("");
}
<div id="test">
  <input type="text" id="txtBox" onchange="char_convert(this);" />
</div>

答案 1 :(得分:2)

您需要一个标记g才能进行全局替换。和RegExp实例而不是字符串。

new RegExp(chars[x], 'g')

工作示例:

function char_convert() {
    var chars = ["1","2","3","4","5","6","7","8","9","0"], 
        codes = ["A","B","C","D","E","F","G","H","I","J"],
        i, j;

    for(x = 0; x < chars.length; x++){
        for (i = 0; i < arguments.length; i++) {
            arguments[i].value = arguments[i].value.replace(new RegExp(chars[x], 'g'), codes[x]);
        }
    }
}
<div id="test">
    <input type="text" id="txtBox" onchange="char_convert(this);"/>
</div>

更紧凑的版本:

function char_convert(s) {
    var xx = { '1': 'A', '2': 'B', '3': 'C', '4': 'D', '5': 'E', '6': 'F', '7': 'G', '8': 'H', '9': 'I', '0': 'J' };
    Object.keys(xx).forEach(c => { s.value = s.value.replace(new RegExp(c, 'g'), $1 => xx[$1]); });
}
<div id="test">
    <input type="text" id="txtBox" onchange="char_convert(this);"/>
</div>

答案 2 :(得分:1)

您可以将Regex与标记g

一起使用
arguments[i].value = arguments[i].value.replace(new RegExp(chars[x], 'g'), codes[x]);

但是您的第一个for循环是多余的,您只能使用indexOf函数

var chars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
var codes = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"];

function char_convert(str) {
    return str.split('').map(e => codes[chars.indexOf(e)]).join('');
}

document.write(char_convert('12321'));

答案 3 :(得分:1)

您可以在单个语句中执行此操作,无需嵌套循环。使用RegEx [0-9]匹配单个数字和g标记以匹配所有可能的数字。

// Keep single array, use index of the element
var codes = ['J', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
var str = '112';

// Replace all the elements by it's code from array
str = str.replace(/[0-9]/g, m => codes[m]);
console.log(str);

&#13;
&#13;
var codes = ['J', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];

document.getElementById('test').addEventListener('keyup', function() {
  var str = this.value;
  str = str.replace(/[0-9]/g, m => codes[m]);

  // Same as

  // str = str.replace(/[0-9]/g, function(m) {
  //     return codes[m];
  // });

  document.getElementById('output').innerHTML = str;
}, false);
&#13;
<input id="test" />
<div id="output"></div>
&#13;
&#13;
&#13;