替换给定偏移后发生的子字符串

时间:2015-04-09 21:49:51

标签: javascript replace substring

我有一个字符串格式如下:

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

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

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

显然,这样做的方法是用字符串68替换字符串<replaced>

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

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

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

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

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

3 个答案:

答案 0 :(得分:4)

将您的前缀添加到替换功能。

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);

答案 1 :(得分:0)

替代答案。不易出错。如果它是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);

答案 2 :(得分:0)

您能依靠分隔符以及要替换分隔符的文本的位置吗?如果是这样,这里有几种替换文本splitsplice分隔符的方法。

更简单的一个,逗号上的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选项对你提出的案例更好。