Javascript: заменить несколько одинаковых частей в строке с разными строками - PullRequest
0 голосов
/ 27 сентября 2018

Я работаю над карточной игрой "заполнить пробелы", (очень) похожей на "Карты против человечества".В некоторых случаях я хочу обновить строку текста с несколькими пробелами (например, «Мой ______ - ______.»), Но у меня возникают проблемы при замене этих одинаковых пустых полей различными строками.Допустим, я бы хотел превратить свою строку в «Мой кот - это белый ».Как я мог это сделать?Я могу заменить все пустые места в моих строках одним и тем же фрагментом текста, но я не могу чередовать их.Я думаю, я мог бы разрезать мою строку на куски каждый раз, когда заканчивается свободное место, заменяя все фрагменты текстом, который я хочу, и затем соединяя строки вместе ... но есть ли более простой способ?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

В качестве альтернативы можно использовать это регулярное выражение _{1,6} без глобального флага g.

Вызов функции String.prototype.replace(regexpWithNoG, string) заменит только первое совпадение.

let str = "My ______ is ______.";
    words = ["cat", "white"];

words.forEach(w => str = str.replace(/_{1,6}/, w));
console.log(str);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 27 сентября 2018

Это функция для получения этого результата.

function replace(str,values){
  var parts=str.split(/[_]+/g)
  var result = []
  result.push(parts[0])
  for (var i=1; i<parts.length; i++){
    result.push(values[i-1])
    result.push(parts[i])
  }
  return result.join("")
}

Пример:

alert(replace("asdad ___ asdasd ___ aaa",[1,2]))

Возвращает:

 "asdad 1 asdasd 2 aaa"

https://codepen.io/anon/pen/BqBKbM?editors=1010

0 голосов
/ 27 сентября 2018

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

My {1} is {2}.

Если вы хотите отобразить оригинальную версию, которая была у ваших пользователей, просто замените заполнители {1}, {2} и т. Д. Подчеркиванием.Затем, когда вам нужно заполнить конкретный пробел, укажите целевой заполнитель напрямую.

var input = "My {1} is {2}.";
var display = input.replace(/\{\d+\}/g, "______");
console.log(display);
var result = input.replace("{1}", "cat");
result = result.replace("{2}", "white");
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...