如何动态使用string.replace?

时间:2018-04-23 21:57:04

标签: javascript string

wordsArray = ['guy', 'like', 'sweet', 'potatoes']; //so on and so forth
string = "I am a **NOUN** and I **VERB** **ADJECTIVE** **NOUN**.";
DELIMITER = "**";

for (var i = 0; i < wordsArray.length; i++)
{
    string.replace(DELIMITER, wordsArray[i]);
}

嗨,这是我的代码的简化版本。我正在创建一个疯狂的lib,而且WordsArray的长度总是等于填空的数量。我当前代码的问题是,在for循环中,它将替换每个**。问题是,我想要替换整个事物,例如**NOUN**,而不仅仅是**。但是,由于** **之间的任何内容并不总是相同,因此string.replace()将无法正常工作。任何人都可以建议我一个可以替换演讲的所有部分的编辑,但最终还是将字符串作为正确的文本块返回吗?

3 个答案:

答案 0 :(得分:1)

您可以先使用string.match抓取所有**<STRINGS>**,然后使用var wordsArray = ['guy', 'like', 'sweet', 'potatoes']; var string = "I am a **NOUN** and I **VERB-** **ADJECTIVE** **NOUN**."; var DELIMITER = "**"; var newString = string; // copy the string var stringArray = string.match(/(\*\*[A-Za-z-]+\*\*)/g); // array of all **<STRINGS>** for (var i = 0; i < wordsArray.length; i++) { newString = newString.replace(stringArray[i], wordsArray[i]); } console.log(newString);执行此操作:

&#13;
&#13;
{{1}}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以将数组绑定到replacer并在字符串上调用replace一次,我认为它更简单:

"I am a **NOUN** and I **VERB** **ADJECTIVE** **NOUN**.".replace(/(\*\*\w+\*\*)/gi,(function(){
    this._currentIndex = this._currentIndex || 0;
    return this[this._currentIndex++];
}).bind(['guy', 'like', 'sweet', 'potatoes']));

//"I am a guy and I like sweet potatoes."

答案 2 :(得分:0)

使用reduce:

const string = "I am a **NOUN** and I **VERB** **ADJECTIVE** **NOUN**.";
const newString = ['guy', 'like', 'sweet', 'potatoes'].reduce(
  (theString, replacement) => theString.replace(/\*{2}\w+\*{2}/, replacement),
  string
)