Javascript 如何动态使用string.replace?
嗨,这是我代码的简化版本。我正在创建一个mad lib,单词sarray的长度将始终等于填充空格的数量。我当前代码的问题是,在for循环中,它将替换每个**。问题是,我想替换整个东西,比如**名词**,而不仅仅是**。但是,由于****之间的内容并不总是相同的,因此string.replace将无法正常工作。有人能给我建议一种编辑方法,它可以替换演讲的所有部分,但最终还是会返回字符串作为一个适当的文本块吗?您可以使用string.match,首先捕获所有的****部分: var-wordsArray=['guy','like','sweet','potates']; var string=我是**名词**,我**动词**形容词****名词**。; 变量分隔符=**; var newString=string;//复制字符串 var stringArray=string.match/\*\*[A-Za-z-]+\*\*/g;//全部数组**** 对于var i=0;iJavascript 如何动态使用string.replace?,javascript,string,Javascript,String,嗨,这是我代码的简化版本。我正在创建一个mad lib,单词sarray的长度将始终等于填充空格的数量。我当前代码的问题是,在for循环中,它将替换每个**。问题是,我想替换整个东西,比如**名词**,而不仅仅是**。但是,由于****之间的内容并不总是相同的,因此string.replace将无法正常工作。有人能给我建议一种编辑方法,它可以替换演讲的所有部分,但最终还是会返回字符串作为一个适当的文本块吗?您可以使用string.match,首先捕获所有的****部分: var-wordsAr
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]);
}
使用reduce:
"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."
你会用一个。哦,那真的很有帮助!还有一个问题。有时词性可能有-,比如动词结尾。我应该在匹配参数中包含什么来包含-?@idontknowanygoodusernames您是指类似**动词-**?在这种情况下,您必须更新.match中使用的正则表达式。请参阅上面我的更新代码。
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
)