Javascript:用不同的字符串替换字符串中的多个相同部分

时间:2018-09-27 02:11:59

标签: javascript string replace

我正在从事“非常空白”的纸牌游戏,(非常)类似于“反人类纸牌”。在某些情况下,我想用多个空格更新一个文本字符串(例如,“我的______是______。”),但是我很难用不同的字符串替换这些相同的空白字段。假设我想将字符串转换为“我的白色”。我怎么可能做到这一点?我可以用相同的文本替换字符串中的每个空格,但似乎无法在它们之间切换。我想我可以在每次空格结束时将字符串切成碎片,用我想要的文本替换所有片段,然后将字符串连接在一起……但是有没有更简单的方法?

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以在内部尝试在输入字符串中使用占位符。也就是说,请考虑使用以下表示形式:

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);

答案 1 :(得分:0)

另一种选择是使用不带全局标志_{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; }

答案 2 :(得分:0)

这是获得该结果的功能。

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