2014-06-15 8 views
5

Próbuję dowiedzieć się, jak wymienić przykład:wymienić struny od lewej do pierwszego łańcucha występujących w JavaScript

sw1_code1_number1_jpg -> code1_number1_jpg
hon2_noncode_number2_jpg -> noncode_number2_jpg
ccc3_etccode_number3_jpg -> etccode_number3_jpg
ddd4_varcode_number4_jpg -> varcode_number4_jpg

więc wyniki są cały ciąg po pierwszym _ Jeśli nie znajdzie żadnego nic _ następnie zrobić.

Wiem, jak znaleźć i zamienić ciągi, str.replace, indexof, lastindexof, ale nie wiem, jak usunąć do pierwszego znalezionego wystąpienia.

Dziękuję

+0

Spójrz na metodę 'slice': https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice – erbridge

Odpowiedz

1

Użyj metody replace z wyrażenia regularnego:

"sw1_code1_number1_jpg".replace(/^.*?_/, ""); 
+0

Rozważ to zmodyfikowane wyrażenie:'/^. *? _/'w przypadku, gdy ciąg zaczyna się od' _'. – zamnuts

+0

Zaktualizuję moją odpowiedź. –

+0

Do OP: Zwróć uwagę na znaczenie metaznaku "?" Używanego do nieagresywnego dopasowywania - '. *?' Nie robi czegoś takiego jak '(. *)?', Są to całkowicie różne zastosowania. – zamnuts

1

Istnieją różne podejścia można podjąć:

var str = 'sw1_code1_number1_jpg'; 
var arr = str.split('_'); 
arr.shift(); 
var newSfr = arr.join('_'); 

Albo można użyć plaster lub wymienić:

var str = 'sw1_code1_number1_jpg'; 
var newStr = str.slice(str.indexOf('_')+1); 

Albo

var newStr = 'sw1_code1_number1_jpg'.replace(/^[^_]+_/,''); 
+1

Demo plastra nie działa z innymi przykładami niż podany, ponieważ nie wyszukuje indeksu "_" – axelduch

+0

Widzę. Zobacz moją aktualizację. – PeterKA

+1

Nie chcę denerwować, ale powinieneś dodać jeden do wyniku indexOf, ponieważ nie chcesz uwzględniać podkreślenia – axelduch

1

Mógłbyś podzielić ciąg i uzyskać slice

var str = 'sw1_code1_number1_jpg'; 
var finalStr = str.split('_').slice(1).join('_') || str; 

Jeśli oryginalny ciąg nie zawiera podkreślenia, to zwraca oryginalny łańcuch.


UPDATE Prostsza jeden z slice (nadal współpracuje z ciągów nie zawierających podkreślenia)

var str = 'sw1_code1_number1_jpg'; 
var finalStr = str.slice(str.indexOf('_') + 1); 

Ten działa we wszystkich przypadkach, ponieważ gdy nie podkreślenia zostanie znaleziony, -1 jest zwracanych i jak my dodaj 1 do indeksu, który nazywamy str.slice(0), który jest równy str.

Powiązane problemy