2011-11-14 16 views

Odpowiedz

29

Stosując RegExp i ^ aby zapewnić to przedrostek, a nie tylko gdzieś w ciągu:

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 
4
var i; 
for(i = 0; i < arr.length; i++) 
    arr[i] = arr[i].replace(substr, ''); 

przykład:

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

Żądanie OP prefiks jednak Twój kod aktualnie będzie go zastąpić dowolnym miejscu w ciągu – Joe

+0

Powiedział tylko podciąg. – Paulpro

+0

Zapytała "Usuń prefiks z listy strun" – Joe

1

Po prostu przechodzisz przez nie?

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/

7

Wiele odpowiedzi już podane są błędne, ponieważ oni usunąć ciąg docelowego z dowolnego miejsca w każdym z elementów (nie tylko początek). Oto inne podejście:

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

Wynik:

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

Lub, jeśli wolisz proste iteracji (bez funkcji wyższego rzędu):

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), ''); 
+0

Jedyną wołowiną jest to, że tworzysz nowe wyrażenie RegExp za każdym razem, gdy funkcja zostanie trafiona. Przynajmniej w innych językach jest to drogie. –

+0

Liczba odpowiedzi na to pytanie o 10 tys. Plus SO jest niesamowita. –

2

tylko dla niektórych odmian:

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

edycja - aby pokazać, jak ograniczyć się do przedrostka z właściwym regexp.

1

Można użyć jQuery map funkcję -

var arr = $.map(['a1', 'a2'],function (s) { 
    return s.replace(/^a/,''); 
}); 
1

zrobiłbym this:

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

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

See MDN jeśli potrzebne jest pełne wsparcie dla .map() przeglądarki.

możesz również użyć .forEach(), jeśli chcesz zachować oryginalną tablicę.

var pre = 'prefix_'; 

my_arr.forEach(function(v,i){ my_arr[i] = v.slice(pre.length); }); 
5
function trimPrefix(str, prefix) { 
    if (str.startsWith(prefix)) { 
     return str.slice(prefix.length) 
    } else { 
     return str 
    } 
} 

var prefix = "DynamicPrefix" 
trimPrefix("DynamicPrefix other content", prefix) 
Powiązane problemy