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()将无法正常工作。任何人都可以建议我一个可以替换演讲的所有部分的编辑,但最终还是将字符串作为正确的文本块返回吗?
答案 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);
执行此操作:
{{1}}&#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
)