Javascript 根据文本在文本中的位置查找和替换文本

Javascript find and replace text by its position in the text

如果我有这个字符串

“有些东西 [10],其他东西 [10]。\nBla bla bla [不总是数]。";

考虑到[…]标识了一个可以修改的特殊元素,

你会如何编写一个函数来获得以下结果?

var findReplaceElemByPosition = function(delimiters,position,new_value){
    //find all the substrings delimited by the *delimimters*
    //select only the one in a certain *position*
    //replace the old value with the *new_value*
}
var myStrangeString = "Something[10], Something else [10].\nBla bla bla [Not always a number].";
myTransformedString = findReplaceElemByPosition("[]",0,20);
myTransformedString = findReplaceElemByPosition("[]",1,21);
myTransformedString = findReplaceElemByPosition("[]",2,"sometimes just a string");
// expected: myTransformedString = "Something[20], Something else [21].\nBla bla bla [sometimes just a string]."

我通过在分隔符前后添加空格并将文本拆分为数组找到了解决方案,但我想知道是否有更优雅(和专业)的解决方案。

给定一个输入数组,如下所示:

const replacments = [
  20,
  21,
  'some string'
]

您可以使用正则表达式 replace 方法的回调函数轻松替换所有出现的字符串。

function run(string, replacements) {
  const replaceBy = replacements.slice() // just to be safe
  return string.replace(/\[[^\]]*\]/g, (original) => {
    if (replaceBy.length) {
      return `[${replaceBy.shift()}]`
    }
    return original
  })
}

这个函数可以运行为:

const string = 'Something[10], Something else [10].\nBla bla bla [Not always a number].'
const replacements = [20, 21, 'sometimes just a string']
run(string, replacements)
// returns 'Something[20], Something else [21].\nBla bla bla [sometimes just a string].'

现在应该是处理正则表达式的问题,使定界符也成为参数,为此您需要使用 new RegExp,正确转义每个特殊字符以及在替换函数中 re-wrap 它带有正确的分隔符。