替换给定偏移量之后出现的子字符串

Replace a substring that occurs after a give offset

我有一个具有以下格式的字符串:

'User ID: 2894, Task ID: 68, Some other text'

假设我需要将此字符串转换为以下内容:

'User ID: 2684, Task ID: <replaced>, Some other text'

显然,方法是将字符串 68 替换为字符串 <replaced>.

var str = 'User ID: 2894, Task ID: 68, Some other text';
var newStr = str.replace('68', '<replaced>');
alert(newStr);

但如果 User ID 包含相同的数字序列,这可能会在我脸上爆炸。

var str = 'User ID: 2684, Task ID: 68, Some other text';
var newStr = str.replace('68', '<replaced>');
alert(newStr);

不过,我也有关于应该替换的子字符串的字符索引的信息。所以我有以下代码来完成这个任务:

var str = 'User ID: 2684, Task ID: 68, Some other text';
var taskId = '68';
var prefix = 'Task ID: ';
var index = str.indexOf(prefix) + prefix.length;
var newStr = str.substring(0, index) + '<replaced>' + str.substring(index + taskId.length);
alert(newStr);

如您所见,现在我需要调用 substring 两次才能得到结果。但是有没有更简单的代码可以用来替换给定偏移量之后出现的子字符串?

将您的前缀添加到替换函数。

var str = 'User ID: 2894, Task ID: 68, Some other text';
var prefix = 'Task ID: ';
var newStr = str.replace(prefix + '68' + ',', prefix + '<replaced>,');
alert(newStr);

// EDIT* 在这里也添加一个逗号后缀,以防有其他一些以 68 开头的任务 ID 号。显然,这个答案假设它不会总是你要替换的 68,无论数字是多少将传递到此函数中。

备选答案。不易出错。如果它是 JSON.

,使用这个字符串肯定会更容易
var targetId = '68';

var str = 'User ID: 2894, Task ID: 68, Some other text';
var items = str.split(', ');
var prefix = 'Task ID: ';

var foundIndex = items.indexOf(prefix + targetId);
if(foundIndex > -1){
    items.splice(foundIndex, 1, prefix + '<replaced>');
}
var newStr = items.join(', ');
alert(newStr);

您能指望定界符和要替换的文本相对于定界符的位置吗?如果是这样,这里有几种替换文本 spliting 和 spliceing 分隔符的方法。

更简单的一个,split在逗号上,完整替换第二个元素:

JSFiddle

var str = 'User ID: 2894, Task ID: 68, Some other text'
arr1 = str.split(', ')
arr1.splice(1, 1, 'Task ID: <replaced>')
str = arr1.join(', ')
console.log(str)

有点复杂,先是split逗号,然后是冒号:

JSFiddle

var str = 'User ID: 2894, Task ID: 68, Some other text'
arr1 = str.split(', ')
arr2 = arr1[1].split(': ')
arr2.splice(1, 1, '<replaced>')
arr1[1] = arr2.join(': ')
str = arr1.join(', ')
console.log(str)

只是 replace 的替代品。我认为 replace 选项更适合您提出的案例。