2011-09-01 8 views
10

Powiel możliwe:
JavaScript: string containsjaki jest najlepszy sposób sprawdzenia, czy ciąg znaków istnieje w innym?

Szukam algorytmu, aby sprawdzić, czy ciąg istnieje w innym.

Na przykład:

'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true 
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true 

góry dzięki.

+0

Oto wzorzec dla najpopularniejszych sposobów sprawdzania, czy ciąg znaków jest w ciągu znaków: http://jsben.ch/#/o6KmH – EscapeNetscape

Odpowiedz

11

Zastosowanie indexOf:

'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh') > -1; //true 
'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh') > -1; //true 

Możesz również rozszerzyć String.prototype mieć contains funkcję:

String.prototype.contains = function(substr) { 
    return this.indexOf(substr) > -1; 
} 
'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true 
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true 
+1

w dalszej części tej odpowiedzi można utworzyć 'funkcję zawierającą (stóg siana, igłę) { return haystack.indexOf (needle)> -1; } 'Lub nawet utwórz na prototypie String –

+0

@ Jonathan I dodano funkcję' String.prototype'. –

+0

dziękuję za prototypową lekcję elastyczności funkcji! – blackhawk

0

chciałbym przypuszczać, że za pomocą skompilowane Perl opartych wyrażenie regularne będzie całkiem wydajny.

RegEx rx = new Regex('Hello, my name is jonh', RegexOptions.Compiled); 
rx.IsMatch('Hello, my name is jonh LOL.'); // true 
+0

Używam JavaScript, ale dziękuję: P –

+0

Jeszcze lepiej: 'var regex =/Witaj, mam na imię jonh /; regex.test ("Witam, nazywam się jonh LOL."); // true' – clarkb86

1

Jako że firma Digital wskazała metodę indexOf, należy sprawdzić. Jeśli chcesz uzyskać bardziej deklaratywną nazwę, taką jak contains, możesz dodać ją do prototypu String.

String.prototype.contains = function(toCheck) { 
    return this.indexOf(toCheck) >= 0; 
} 

Po tym oryginalny przykładowy kod będzie działać jak napisane

1

Jak o pójściu do zapomnienia:

!!~'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh'); //true 
if(~'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh')) 
    alert(true); 

Korzystanie bitowe NOT oraz do logicznych niezapominajki, aby przekształcić go do wartości logicznej niż przekształcić go plecy.

+0

chociaż to działa, 'val> -1' to mniej operacji – zzzzBov

+0

@zzzzBov, technicznie !! Jest niepotrzebne. Więc tylda zadziała. – Joe

+0

... w zależności od tego, jak ściśle potrzebujesz wartości boolowskiej. Zgadzam się, '~' wypisze prawidłowy stan falsey. – zzzzBov

Powiązane problemy