在字符串中查找子字符串

时间:2013-12-05 07:56:02

标签: javascript jquery

让我们说我有这些字符串:

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

建议?

3 个答案:

答案 0 :(得分: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开头。如果是这种情况,您可以使用正则表达式 - 您只需要new RegExp("^" + table)。但是在 的情况下,您实际上可以使用常规字符串函数做得更好,例如if (href.indexOf(table) == 0)

在查找table=dog*的情况下,这也是一个相当简单的RegExp:new RegExp("table=" + table)。这会查找table=dog在字符串中的任何位置。如果没有正则表达式,您可以执行与上面类似的操作if (href.indexOf("table=" + table) != -1)

答案 1 :(得分:1)

尝试:

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

DEMO here.

答案 2 :(得分: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"));