2012-10-08 21 views
10

Şu anda bir dizede bir sözcük bulmak için str.indexOf("word") kullanıyorum. Fakat sorun şu ki, başka kelimelerin parçalarını da döndürüyor.Javascript dize içinde kelime indeksi bulmak (kelimenin bir parçası değil)

Örnek: "Foobar'a gittim ve foo sipariş ettim." Tek kelime "foo" nun ilk dizini istiyorum, foobar içindeki foo değil.

"foo" için arama yapamıyorum çünkü bazen tam bir bitiş veya virgül (herhangi bir alfasayısal olmayan karakter) tarafından takip edilebilir.

+3

Yanıtları kabul etmeyen altı sorunuz var. Geri dönün ve bir cevabı kabul edin ve insanlar buna mesaj atmak isteyeceklerdir. – jeremy

+0

Tamam, teşekkürler "user759885" şeklinde bir hesabım vardı, ben de geçtim ve yaptım. – user759885

cevap

18

Bunun için normal ifadeler kullanabilirsiniz gerekecek:

> 'I went to the foobar and ordered foo.'.indexOf('foo') 
14 
> 'I went to the foobar and ordered foo.'.search(/\bfoo\b/) 
33 

/\bfoo\b/ maçları sözcük sınırları ile çevrilidir foo. Genel durum için

> var word = 'foo'; 
> var regex = new RegExp('\\b' + word + '\\b'); 
> 'I went to the foobar and ordered foo.'.search(regex); 
33 
+0

Genel bir dava açmaya gitmiştim ama benim uygulamam çalışmıyor gibi görünüyor. 'reg = '/ \ b' + kelime + '\ b /'; str.indexOf (reg); ' – user759885

+0

Eğer regex oluşturmak istiyorsanız iki adım gerekir:" \ "(" \\ b ") çift scape ve RegExp yapıcıyı çağırın:' reg = new RegExp ("\\ b "+ word +" \\ b ");' –

+0

Ah, indexOf ifadesinin normal ifadeyi almadığını görüyorum, böylece 'search()' ifadesini kullandınız. Benim son çözümüm, 'reg =' \\ b ('+ word +') \\ b '; '' str.indexOf (reg); ' – user759885

2

sözcük sınırları ile sınırlı normal ifade oluşturmak için RegExp constrcutor kullanın:

inşa, bir RegExp nesneyi keyfi bir kelime maç için

function matchWord(s, word) { 
    var re = new RegExp('\\b' + word + '\\b'); 
    return s.match(re); 
} 

Not o tireler kelime sınırları olarak kabul edilir, bu yüzden güneşte kurutulmuş iki kelimedir.

İlgili konular