-1

我有一个看起来像这样的字符串:

"My favorite color is {color:tan}."

我试图弄清楚如何编写一个javascript函数,用我传入的任何颜色替换所有出现的令牌,但如果字符串太长,则默认为“tan”。

例如

var string = "My favorite color is {color:tan}.";
var favoriteColor = "red"; 
var maxLength = 25;
var tokenPrefix = "color"
var result = replaceToken(string, favoriteColor, maxLength, tokenPrefix);

现在 "result" 应该等于"My favorite color is red.",因为字符串有 25 个字符长。

但如果我设置favoriteColor = "purple",那么结果应该等于"My favorite color is tan.",因为“紫色”这个词会导致字符串长度超过 25 个字符。

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

4

1 回答 1

1

肯定有方法可以优化这一点,但作为一个快速的方法,这里有一个如何做到这一点的例子:

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
}
于 2013-11-04T23:22:32.443 回答