2013-12-05 2 views
0

Допустим, что у меня есть эти строки:Поиск подстроки в строке

My dog is young 

I have a _dog_ 

Dogs are fine 

Я хочу, чтобы получить любую строку, которая имеет dogв нем только. Это означает, что я хочу вернуть только первую строку. Два других, содержат отметки типа _, которые я не хочу получать, или у него есть дополнительный s в конце.

Я пытался сделать что-то вроде:

$('#side-categories a').each(function() { 
    var href = $(this).attr("href"); 
    if (href.indexOf(table) >= 0) { 
     $(this).css("color", "red"); 
     $(this).parents("ul").show().prev('.do').text('-'); 
    } 
}); 

Но она также возвращает _dog_ и Dogs

предложения?

+1

Вы можете использовать регулярное выражение. –

+0

Я не вижу причины, чтобы проголосовать за мое сообщение. У меня действительно нет знаний или опыта с регулярным выражением. Если бы вы могли мне помочь, было бы здорово. – kfirba

+0

Просто, чтобы быть ясным: 'href.indexOf (table)> = 0' является вашей попыткой поиска« собаки »? Является ли '' собака '' значением 'table'? –

ответ

6

Это идеальный случай для регулярных выражений!

В этом случае, вы хотите сделать это:

$('#side-categories a').each(function() { 
    var href = $(this).attr("href"); 
    if(href.match(/\sdog\s/)){ 
     $(this).css("color", "red"); 
     $(this).parents("ul").show().prev('.do').text('-'); 
    } 
}); 

Регулярные выражения хорошо учиться. В этом случае это довольно просто. /\sdog\s/ говорит «регулярное выражение, содержащее пробелы, строчную строчную собаку и еще несколько пробелов». Это включает в себя вашу первую строку, одновременно устраняя вторую (из-за пробела) и третью (сделайте точную строку dog, за которой следует пробел).

Если вы используете переменную (например, table?) Для хранения строки, которую вы ищете, вам нужно построить регулярное выражение. Важные линии становятся:

var regex = new RegExp("\s" + table + "\s"); 
if(href.match(regex)){ 

на основе ваших комментариев, это выглядит, как вы хотите, чтобы увидеть, если строка начинается с dog. Если это так, вы можете использовать regex - вы просто хотите new RegExp("^" + table). Но в этот случай, вы действительно можете сделать лучше с регулярной строковой функцией, такой как if (href.indexOf(table) == 0).

В случае поиска table=dog*, это довольно простой RegExp: new RegExp("table=" + table). Это выглядит как table=dog в любом месте строки. Без regexp вы бы сделали аналогично выше, if (href.indexOf("table=" + table) != -1).

+2

При передаче строки в '.match' в порядке, передача фактического регулярного выражения будет более чистой. –

+0

Что делать, если я хочу передать параметр вместо 'dog'? – kfirba

+0

@kfirba Проверьте мое обновление. :-) –

1

Try:

if(href.match(/ dog /g)){ 
    $(this).css("color", "red"); 
    $(this).parents("ul").show().prev('.do').text('-'); 
} 

DEMO here.

+1

Это не будет работать, если вход соответствует '^ собаке'. –

1

Вы также можете достичь этого, используя регулярные выражения, но вы должны явно указать, что слово, которое вы используете в шаблоне соответствия имеет пробел перед это и после него, что довольно странно.

Условие, которое вы ищете, - это тот, который разделяет настройку на слова, потому что в противном случае будет возвращено предложение _dog_. Итак:

function checkForWord(word, sentence) 
{ 
    wordArray = sentence.split(" "); 
    for(i=0; i<wordArray.length; i++) 
    { 
     if(wordArray[i] == word) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Использование:

alert(checkForWord("dog", "My dog is young")); 
Смежные вопросы