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
}