Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何动态使用string.replace?_Javascript_String - Fatal编程技术网

Javascript 如何动态使用string.replace?

Javascript 如何动态使用string.replace?,javascript,string,Javascript,String,嗨,这是我代码的简化版本。我正在创建一个mad lib,单词sarray的长度将始终等于填充空格的数量。我当前代码的问题是,在for循环中,它将替换每个**。问题是,我想替换整个东西,比如**名词**,而不仅仅是**。但是,由于****之间的内容并不总是相同的,因此string.replace将无法正常工作。有人能给我建议一种编辑方法,它可以替换演讲的所有部分,但最终还是会返回字符串作为一个适当的文本块吗?您可以使用string.match,首先捕获所有的****部分: var-wordsAr

嗨,这是我代码的简化版本。我正在创建一个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;iconsole.lognewString 您可以将数组绑定到replace并对字符串调用replace一次,我认为这要简单得多:

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
)