我有这样的字符串:str = "ball, apple, mouse, kindle";
我还有另一个要在此字符串中搜索的文字:search = 'apple';
如果逗号分隔的字符串中存在apple
,如何确定使用JavaScript?
P.S:str
可以在逗号和下一个项目之间加上或不加空格。
答案 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'; });
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!');
};