2011-01-03 15 views
7

Mam zmienną, która zawiera tekst, niektóre html, w zasadzie może być ciąg. Muszę przeszukać zmienną dla określonego ciągu, aby przetworzyć tę zmienną inaczej, jeśli jest zawarta. Oto fragment tego, co staram się robić, nie działa oczywiście :)jQuery Wyszukaj tekst w zmiennej?

$.each(data.results, 
    function(i, results) { 
    var text = this.text     
    var pattern = new RegExp("^[SEARCHTERM]$"); 
    if(pattern.test(text)) 
    alert(text); //was hoping this would alert the SEARCHTERM if found... 
+0

co to znaczy, gdy robisz "alert (this.text)"? – ajreal

Odpowiedz

9

Można użyć .indexOf() zamiast wykonać wyszukiwanie.

Jeśli ciąg nie zostanie znaleziony, zwraca -1. Jeśli zostanie znaleziony, zwraca pierwszy oparty na zera indeks, w którym został zlokalizowany.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text.indexOf(term) != -1) 
    alert(term); 

Jeśli liczyliśmy na dokładne dopasowanie, które korzystanie z ^ i $ zdaje się sugerować, można po prostu zrobić porównanie ===.

var text = this.text; 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

EDIT: Na podstawie Twojego komentarza, chcesz dokładne dopasowanie, ale === nie działa, natomiast indexOf() jest. Czasami ma to miejsce, jeśli istnieje jakiś odstęp, który należy przyciąć.

Spróbuj przyciąć białe znaki za pomocą jQuery's jQuery.trim() method.

var text = $.trim(this.text); 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

Jeśli to nie zadziała, polecam rejestrowanie this.text do konsoli, aby zobaczyć, czy jest to wartość można oczekiwać.

+0

Dzięki, więc szukam dokładnego dopasowania do wyszukiwanego hasła, ale porównanie === nie działa. Jednak korzystanie z indexOf. Dlaczego miałoby to być? – thatryan

+0

@thatryan: To zależy od wartości 'this.text'. Nie wiem, co to jest 'data.results', nie mogę powiedzieć na pewno, ale zgaduję, że być może jest jakiś biały znak, który musi zostać przycięty.'IndexOf()' znajdzie w łańcuchu wszelkie częściowe dopasowanie, więc czasami może dawać fałszywe trafienia, podczas gdy '===' zawiedzie, jeśli wystąpią jakiekolwiek różnice, w tym białe znaki. Zaktualizowałem swoją odpowiedź. – user113716

+0

@atryan: Czy udało Ci się rozwiązać ten problem? – user113716

2

Jeśli używasz wyrażenia regularnego, aby szukać podciągu można znaleźć meczu tak:

var match = text.match(pattern); 
if(match) { 
    alert(match[0]); 
} 

zapoznać się z dokumentacją .match() aby uzyskać więcej informacji.

Pamiętaj, że jeśli próbujesz wyszukać ciąg "[SEARCHTERM]" (wyszukiwane hasło zawierające nawiasy), twoja metoda wyszukiwania nie zadziała, ponieważ nawiasy mają specjalne znaczenie w wyrażeniach regularnych. Zamiast tego należy użyć .indexOf():

var index = text.indexOf("[SEARCHTERM]"); 
if(index != -1) { 
    alert("Search term found"); 
} 

Jednakże, jeśli jesteś po prostu staramy się znaleźć dokładne dopasowanie (nic innego, ale termin jest wyszukiwane ciąg jest sprawdzana), należy po prostu porównać ciągi:

if(text == "[SEARCHTERM]") { 
    alert("Search term found"); 
} 
0

Co oznacza "nie działa"?

Należy pamiętać, że należy używać nawiasów klamrowych ({}) z instrukcjami if. Niektóre przeglądarki pozwalają na ich pominięcie, ale powinieneś uwzględnić je, aby były poprawne i wspierają wszystko.

+0

Aha, i brakuje ci średnika na linii, w której zainicjalizujesz zmienną 'test'. –

+0

* "Niektóre przeglądarki zezwalają na ..." * Wykluczenie ich jest dozwolone w specyfikacji językowej, ale z pewnością dobrym zwyczajem jest ich uwzględnienie. – user113716

+1

@patrick dw: Ah, oops! Dziękuję za to. Przyznaję, że zawsze zakładałem; nadal jednak powszechne przeglądarki, takie jak IE6, nie będą z niego zadowolone, więc najlepiej je zachować. –