Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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 如何替换字符串中出现的所有此标记?_Javascript_Regex_Replace - Fatal编程技术网

Javascript 如何替换字符串中出现的所有此标记?

Javascript 如何替换字符串中出现的所有此标记?,javascript,regex,replace,Javascript,Regex,Replace,我有一个字符串如下所示: "My favorite color is {color:tan}." 我试图弄清楚如何编写一个javascript函数,用我传入的任何颜色替换所有出现的标记,但如果字符串太长,则默认为“tan” 例如 现在“result”应该等于“我最喜欢的颜色是红色。”,因为字符串有25个字符长 但是如果我设置了favoriteColor=“purple”,那么结果应该等于“我最喜欢的颜色是棕褐色。”,因为单词“purple”会导致字符串长度超过25个字符 我不熟悉regex,所

我有一个字符串如下所示:

"My favorite color is {color:tan}."
我试图弄清楚如何编写一个javascript函数,用我传入的任何颜色替换所有出现的标记,但如果字符串太长,则默认为“tan”

例如

现在“result”应该等于
“我最喜欢的颜色是红色。”
,因为字符串有25个字符长

但是如果我设置了
favoriteColor=“purple”
,那么结果应该等于
“我最喜欢的颜色是棕褐色。”
,因为单词“purple”会导致字符串长度超过25个字符


我不熟悉regex,所以我不确定这在regex中是否可行,但我尝试使用indexOf()来查找标记,但可能有多个实例。我还尝试了一个replaceAll(),但因为它不是一个简单的字符串,所以它不会真正起作用。

肯定有一些方法可以优化它,但作为一个快速的例子,下面是一个如何操作的示例:

replaceToken(string, favoriteColor, maxLength) {
  tokens = string.match(/{(.*?)}/)
  color = tokens[1].split(':')[1]
  if (favoriteColor.length < maxLength) string = string.replace(tokens[0], favoriteColor)
  else string = string.replace(tokens[0], color)
  return string
}
replaceToken(字符串、favoriteColor、maxLength){
tokens=string.match(/{(.*?}/)
颜色=标记[1]。拆分(“:”)[1]
如果(favoriteColor.length
是“token”吗总是
{color:XXX}
还是有空格,XXX是否可以包含大括号(即
{,}
),除了“color”之外是否还有其他关键字,比如
{flavor:XXX}
或者
{texture:XXX}
,与@ColinDeClue所说的一样。试着用
/\{color:(\w+}}/
替换,我不熟悉正则表达式,所以我不知道是否可以用正则表达式来实现这一点。我尝试使用indexOf()获取标记的开始和结束位置,但一旦我开始考虑字符串中的多个标记,它很快就变得一团糟。@legostrmtroopr XXX可以包含空格,但不能包含括号。是的,可以有其他关键字。我会更新这个函数,让它也包含一个关键字。这看起来效果很好,但它不会查看令牌前缀。假设我有一个前缀是“color”,另一个前缀是“song”。我们怎么能只指定用“颜色”替换这个呢?@Brian也许你可以用它来编写自己的代码,一直工作到遇到问题为止,然后尝试另一个问题?@Legostrmtroopr对不起,我想我必须更改正则表达式,我甚至不知道从哪里开始。现在我可以从令牌数组中获取它。
replaceToken(string, favoriteColor, maxLength) {
  tokens = string.match(/{(.*?)}/)
  color = tokens[1].split(':')[1]
  if (favoriteColor.length < maxLength) string = string.replace(tokens[0], favoriteColor)
  else string = string.replace(tokens[0], color)
  return string
}