2011-01-14 11 views

Odpowiedz

11

Kod

var text1 = "abcdefgh"; 
var text2 = "cde"; 

alert(text1.substring(0, text1.indexOf(text2))); 
alert(text1.substring(0, text1.indexOf(text2) + text2.length)); 

pierwszego alarmu nie zawiera wyszukiwany tekst, drugi nie.

Wyjaśnienie

Wytłumaczę drugą linię kodu.

text1.substring(0, text1.indexOf(text2) + text2.length)) 

 

text1.substring(startIndex, endIndex) 

Ten fragment kodu wykonuje każdy znak z startIndex do endIndex, gdzie 0 oznacza pierwszy znak. Tak więc w naszym kodzie, szukamy od 0 (start) i kończy się na:

text1.indexOf(text2) 

ta zwraca pozycję znaku pierwszej instancji Text2 w tekście 1.

text2.length 

ta zwraca długość tekstu 2, więc jeśli chcemy uwzględnić to w naszej zwróconej wartości, dodajemy to do długości zwracanego indeksu, podając nam zwrócony wynik!

4

Można użyć substring i indexOf:

Y.substring(0, Y.indexOf(X) + X.length)) 

DEMO

oczywiście należy sprawdzić wcześniej, czy X w Y.

0
var index = y.indexOf(x); 
y = index >= 0 ? y.substring(0, y.indexOf(x) + x.length) : y; 
0
var X = 'S'; 
var Y = 'TEST'; 
if(Y.indexOf(X) != -1){ 
var pos = parseInt(Y.indexOf(X)) + parseInt(X.length); 
var str = Y.substring(0, pos); 
Y = str; 
} 
document.write(Y); 
+0

Nie trzeba używać tutaj 'parseInt'. 'indexOf' i' length' zawsze zwracają liczby całkowite. –

+0

@Felix Kling: Tylko ze względu na mój zwyczaj używania parseInt(), kiedy wykonuję operacje arytmetyczne –

3

Jeśli szukasz, aby dopasować tylko X w Y i wrócić tylko X, polecam korzystania match.

var x = "treasure"; 
var y = "There's treasure somewhere in here."; 
var results = y.match(new RegExp(x)); // -> ["treasure"] 

results albo będzie pusta tablica lub zawierają pierwsze wystąpienie x.

Jeśli chcesz wszystko w y aż do pierwszego wystąpienia x, wystarczy trochę zmodyfikować wyrażenie regularne.

var results2 = y.match(new RegExp(".*" + x)); // -> ["There's treasure"] 
+0

Jak mogę to zrobić, jeśli w łańcuchu jest dwa "skarb" i chcę dopasować po ostatnim? – user2284570

Powiązane problemy