【问题标题】:Insert string into string on a dynamic position [closed]在动态位置将字符串插入字符串[关闭]
【发布时间】:2020-11-05 22:18:48
【问题描述】:

我有一个包含一些颜色标签的字符串,如下所示:

[GREEN][BLUE][RED]

标签的位置可以不同。所以[GREEN] 也可以在中间或最后一个位置。

现在我有一个新的颜色标签应该添加到该列表中,我们称之为[YELLOW]。所以[YELLOW]有一个动态的位置号,我们取变量const position = 2。嗯,这意味着[YELLOW] 应该放在第二位,应该是这样的:

[GREEN][YELLOW][BLUE][RED]

我该怎么做?

【问题讨论】:

  • 你应该数组而不是正则表达式,当你有带有特殊字符的标签或像That's Him这样的词时,它会容易得多。你可以看到例子here
  • 你能看看这个帖子stackoverflow.com/questions/4364881/…

标签: javascript regex


【解决方案1】:

const text = "[GREEN][BLUE][RED]";
const inputNumber = 2;
const addingText = "[YELLOW]";

const index = text.split("[", inputNumber).join("[").length;
const output = [text.slice(0, index), addingText, text.slice(index)].join('');

console.log(output)

【讨论】:

  • 您可以动态更新inputNumber
【解决方案2】:

我会有一个这样的占位符数组:

const placeholders = ['[GREEN]', '[YELLOW]', '[BLUE]', '[RED]'];

当您需要在某个位置添加另一个占位符时,您只需使用splice 函数:

placeholder.splice(position, 0, newPlaceholder);

然后当你需要使用它时,你只需将它转换为字符串:

placeholder.join('');

我认为这会让它更容易处理,更易读,也可能更快。

【讨论】:

    【解决方案3】:

    您可以将.replace 函数与以下正则表达式一起使用。

    ((?:\[.*?\]){2})
    

    当您使用${variable} 将变量插入正则表达式时,您使用:

    ((?:\\[.*?\\]){${position-1}})
    

    var listColors = "[GREEN][BLUE][RED]";
    const position = 2;
    var color = "[YELLOW]";
    
    
    var pattern = `((?:\\[.*?\\]){${position-1}})`;
    var regex = new RegExp(pattern);
    
    var newListColors = listColors.replace(regex, `$1${color}`);
    console.log(newListColors);

    【讨论】:

      【解决方案4】:

      我会将其拆分为数组,然后在特定位置添加:

      var text = "[GREEN][BLUE][RED]";
      var matches = text.match(/\[\w+\]/g);
      matches.splice(1, 0, "[YELLOW]");
      var result = matches.join("")
      console.log(result);

      https://www.w3schools.com/jsref/jsref_splice.asp

      【讨论】:

        【解决方案5】:

        你应该找到第一个]出现在哪个位置,然后连接[yellow]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-20
          • 2018-04-13
          相关资源
          最近更新 更多