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 它带有正确的分隔符。
如果我有这个字符串
“有些东西 [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 它带有正确的分隔符。