2016-04-07 3 views
0

Мне нужно применить заменяющую маску поверх строки в javascript. Маска представляет собой пользовательский ввод с помощью следующего синтаксиса:Маска замены символов над строкой в ​​javascript

  • «#» указывает на то, что символ в той же позиции во входной строке должны быть оставлены нетронутыми
  • Любое другое значение указывает на то, что символ в той же позиции во входной строке следует заменить на это значение

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

Спасибо

var reference = '123-45678-000'; 
var mask ='###W#####-9##'; 
var newReference = mask; 

while ((match = /#{1}/.exec(newReference)) != null) { 
    newReference = newReference.substring(0, match.index) + reference.substring(match.index,match.index+1) + newReference.substring(match.index + 1); 
} 
console.log("old : " + reference);  //prints 123-45678-000 
console.log("mask: " + mask);   //prints ###W######9## 
console.log("new : " + newReference); //prints 123W45678-900 
+0

Что должно быть сделано, если длины не совпадают. Используя вашу маску образца '### W ##### - 9 ##', что должно произойти, если я только введу '12' в качестве ввода? – dman2306

+0

@ dman Хорошая точка. Я должен был уточнить, что у меня есть логика (не показана на фрагменте), которая гарантирует, что вход и маска имеют одинаковую длину. –

ответ

1

Попробуйте следующее:

newReference = mask.replace(/#/g,function(m,o) {return reference[o];}); 
+0

Спасибо! Я читал документ раньше, но в то время он не нажимал на меня. Хорошее использование свойства смещения. Некоторые ссылки здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

1
var reference = '123-45678-000'; 
var mask ='###W#####-9##'; 
var newReference = ""; 

for (var n=0;n<reference.length;n++){ 
    newReference+=(mask.charAt(n) == '#')?reference.charAt(n):mask.charAt(n); 
} 
Смежные вопросы