如何在String中替换所有出现的此标记?

时间:2013-11-04 23:13:05

标签: javascript regex replace

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

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

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

E.g。

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

现在“结果”应该等于"My favorite color is red.",因为字符串长度为25个字符。

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

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

1 个答案:

答案 0 :(得分: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
}