从字符串列表中删除前缀

45

如何从字符串数组中删除子字符串(前缀)?(即从每个元素中删除子字符串)

10个回答

50

使用 RegExp^ 确保匹配的是前缀而不是字符串中的任何位置:

var arr = ['a1', 'a2', 'a54a'];
for(var i = 0, len = arr.length; i < len; i++) {
    arr[i] = arr[i].replace(/^a/, '');
}
arr; // '1,2,54a' removing the 'a' at the begining

21
function trimPrefix(str, prefix) {
    if (str.startsWith(prefix)) {
        return str.slice(prefix.length)
    } else {
        return str
    }
}

var prefix = "DynamicPrefix"
trimPrefix("DynamicPrefix other content", prefix)

15

已经给出的许多答案是错误的,因为它们会从每个元素中的任何位置删除目标字符串(而不仅仅是开头)。这里是另一种方法:

var str = "str_";
["str_one", "str_two_str_", "str_three"].map(function(el) {
    return el.replace(new RegExp("^" + str), '');
});

结果:

["one", "two_str_", "three"]

或者,如果您喜欢简单的迭代(没有高阶函数):

var str = "str_";
var list = ["str_one", "str_two_str_", "str_three"];
for (var i = 0; i < list.length; i++)
    list[i] = list[i].replace(new RegExp("^" + str), '');

1
唯一的问题是每次函数被调用时都要实例化一个新的RegExp。至少在其他语言中,这是很昂贵的。 - Matt Hudson
这个问题的回答数量超过了10k个SO用户,真是太棒了。 - Matt Hudson

8
var pre = 'prefix_';

my_arr = my_arr.map(function(v){ return v.slice(pre.length); });

如果需要完整的浏览器支持.map(),请参阅MDN。

如果您需要保留原始数组,则可以使用.forEach()

var pre = 'prefix_';

my_arr.forEach(function(v,i){ my_arr[i] = v.slice(pre.length); });

1
该解决方案通过pre的长度剥离数组字符串的前缀,而不管它是否匹配数组中字符串的前缀。 - bill.lee

4
var i;
for(i = 0; i < arr.length; i++)
    arr[i] = arr[i].replace(substr, '');

例子:

var arr = ['test1', '2test', '3test3'];

// Use only one of these lines
var substr = 'test';  // This is for substrings
var substr = /^test/; // This is for prefixes only

var i;
for(i = 0; i < arr.length; i++)
    arr[i] = arr[i].replace(substr, '');

console.log(arr); // Prints ["1", "2", "33"] to console

3
楼主请求一个前缀,你的代码目前会在字符串任何位置替换它。 - Joe
她问道:“如何从一组字符串中移除前缀?” - Joe
1
标题说一件事,正文又是另一回事。 - Felix Kling
1
哦,我明白了,在标题中...那么只需将substr的值从'test'更改为/^test/。然后它会按预期打印出["1", "2test", "3test3"]。 - Paul

2

为了增加一些变化:

substr = new RegExp('(^|\|)prefix_', 'g');
arr = arr.join('|').replace(substr, '').split('|')

编辑 - 为了展示如何使用正确的正则表达式来限制只显示前缀。


1

只需在字符串列表上进行迭代(例如使用for循环),并使用replace方法(详细信息在此处)即可。


1

只需简单地循环遍历它们吗?

var list = ["foo", "bar", "meh"];
for(var i = 0; i < list.length; i++)
    list[i] = list[i].substr(1, 1);

http://jsfiddle.net/DcvE2/1/


1
你可以使用jQuery的map函数 -
var arr = $.map(['a1', 'a2'],function (s) {
    return s.replace(/^a/,'');
});

1

我会做this

var element = document.getElementsByTagName('p');
for(i in element){
 str = element[i].innerHTML;
 str = str.replace(/^pre_/,'');
 element[i].innerHTML = str;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接