如果string是逗号分隔的字符串,则为JavaScript

时间:2014-08-08 18:27:25

标签: javascript jquery

我有这样的字符串:str = "ball, apple, mouse, kindle";

我还有另一个要在此字符串中搜索的文字:search = 'apple';

如果逗号分隔的字符串中存在apple,如何确定使用JavaScript?

P.S:str可以在逗号和下一个项目之间加上或不加空格。

9 个答案:

答案 0 :(得分:13)

简单的解决方案:

var str = "ball, apple, mouse, kindle";
var hasApple = str.indexOf('apple') != -1;

但是,如果str包含“apple fritters”,那也会匹配:

var str = "ball, apple fritters, mouse, kindle";
var hasApple = str.indexOf('apple') != -1; // true

您可以采取不同的方法来更具体。一种方法是将字符串拆分为逗号,然后遍历所有部分:

var splitString = str.split(',');
var appleFound;
for (var i = 0; i < splitString.length; i++) {
    var stringPart = splitString[i];
    if (stringPart != 'apple') continue;

    appleFound = true;
    break;
}

注意:您可以使用内置的“some”方法简化该代码,但这仅适用于较新的浏览器。您还可以使用Underscore库,它提供了自己的“某种”方法,可以在任何浏览器中使用。

或者,您可以使用正则表达式来专门匹配“apple”:

var appleFound = /\Wapple,/.test(',' + str + ',');

然而,我认为你真正最好的选择是不要试图自己解决这个问题。每当你遇到这样的问题时,最好的办法就是利用现有的库。一个例子是Underscore String库,特别是如果你已经使用了Underscore。如果没有,那么可以使用其他通用字符串实用程序(例如String.js)库。

答案 1 :(得分:9)

要真正测试确切的字符序列“apple”是否是逗号分隔列表中的项目(而不仅仅是整个字符串的子字符串),您可以这样做(考虑值之前和之后的可选空格):

如果Array#indexOf可用:

var items = str.split(/\s*,\s*/);
var isContained = items.indexOf('apple') > -1;

如果Array#some可用:

var items = str.split(/\s*,\s*/);
var isContained = items.some(function(v) { return v === 'apple'; });

使用regular expression

var isContained = /(^|,)\s*apple\s*($|,)/.test(str);

答案 2 :(得分:2)

您可以将字符串转换为数组并检查搜索字符串是否在其中。

var stuffArray = str.split(","); 
var SearchIndex = stuffArray.indexOf("Apple");

搜索SearchIndex表示数组中的位置。 如果SearchIndex&lt; 0找不到该项目。

答案 3 :(得分:2)

你可以用逗号分隔列表中非常容易但又容易出错的方式检查字符串apple的索引:

var str = "ball, apple, mouse, kindle"
var index = str.indexOf('apple')
alert(index) 

检查结果>-1告诉您str包含字符串apple。但是,这会给你误报,例如str

var str = "ball, crab apple, mouse, kindle"

这仍然会为apple提供>-1的索引 - 可能不是您想要的。

答案 4 :(得分:2)

您可以使用String.split()Array.indexOf()

var str = "ball, apple, mouse, kindle";
var search = "apple";
var arr = str.split(", ");
if (arr.indexOf(search) !== -1) {
   alert('yes');
} else {
   alert('no');
}

答案 5 :(得分:1)

请注意,对于此代码,您需要jquery库

str = "ball, apple, mouse, kindle";
str_arr = str.split(',');
for (i = 0; i < str_arr.length; i++) { 
   if($.trim(str_arr[i]) === "apple"){
     alert('yiha i found an apple here. here it is: ' + str_arr[i]);
   }
}

答案 6 :(得分:1)

这里有一些很好的答案,但我认为我可以使用正则表达式提供替代方案。这将不区分大小写,因此匹配Apple&#39;或者&#39; apple&#39;。此外,它不会匹配&#34; Appleby&#34;或者&#34;苹果派&#34;,所以你可以免于误报(或正则表达式可以改为包括那些):

var str = "ball, apple, mouse, kindle";
var whatToFind = "apple";
var myRegEx = new RegExp(",\\s*" + whatToFind + "\\s*,", "i");
myRegEx.test(str);

那是基本的正则表达式。这是一个函数内部和一些测试:

var str = "ball, apple, mouse, kindle";
var str2 = "ball, apple pie, house,cat";
var str3 = "ball,Apple,house, cat";
var str4 = "ball,Appleby's, peach, dog";
strs = [str, str2, str3, str4];
var searchFor = "apple";


var matches = function (stringToSearch, whatToFind)
{
    var myRegEx = new RegExp(",\\s*" + whatToFind + "\\s*,", "i");
    return myRegEx.test(stringToSearch);
}

strs.forEach(function (st) {
    var confirm = " was ";
    if(matches(st, searchFor)==true)
        confirm = " was ";
    else
        confirm = " was not ";
    console.log( '"' + searchFor + '"' + confirm + "found in " + '"' + st + '"');
});

这是输出:

  

&#34;苹果&#34;被发现在球,苹果,老鼠,点燃&#34;

     

&#34;苹果&#34;没有在球,苹果派,房子,猫等中找到#34;

     

&#34;苹果&#34;被发现在球,苹果,房子,猫和#34;

     

&#34;苹果&#34;没有在&#34;球,Appleby's,桃子,狗等中找到#34;

答案 7 :(得分:0)

这是另一个使用正则表达式的解决方案

//some test csv
var t = '1,2,3,4,32,apple,apple struddle,applestruddle,41,42,43';

现在在此处创建一个正则表达式'reg'..可以像这样对它进行硬编码

var reg =  /(^|,\s{0,1})\bapple struddle\b(,|$)/;

或以编程方式类似于

var check_value = "apple";
var reg = new RegExp("(^|,\\s{0,1})\\b" + check_value + "\\b(,|$)","g");

,您只需致电

if(reg.test(t)){
  console.log("apple .. no struddle!!");
}

只需在正则表达式上做一个注释即可。我在逗号后输入\ s {0,1}只是为了迎合“,”与“,”分隔符..显然..整理出您的间距要求适应自己;)

答案 8 :(得分:0)

我尚未测试过性能,但是我认为使用分隔值的数组必须是简短而直接的解决方案之一。因此,我建议获取一个值数组并使用inArray命令进行检查,如下所示:

var str = "ball,apple,mouse,kindle";
var search = 'apple';

var strArray = str.split(',');
if ($.inArray(search, strArray) !== -1) {
  alert('hurrah :)');
} 
else {
  alert('nothing!');
};