str = "ball, apple, mouse, kindle"
,我有另一个要在此字符串中搜索的文本:search = 'apple'
。如何使用JavaScript确定逗号分隔字符串中是否存在apple
?注:
str
可以带或不带逗号和下一项之间的空格。str = "ball, apple, mouse, kindle"
,我有另一个要在此字符串中搜索的文本:search = 'apple'
。如何使用JavaScript确定逗号分隔字符串中是否存在apple
?str
可以带或不带逗号和下一项之间的空格。简单解决方案:
var str = "ball, apple, mouse, kindle";
var hasApple = str.indexOf('apple') != -1;
然而,如果str
包含“苹果油炸圈”,它也将匹配:
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库,该库提供了自己的“some”方法,并可在任何浏览器中使用。
或者,您可以使用正则表达式来特定匹配“apple”:
var appleFound = /\Wapple,/.test(',' + str + ',');
然而,我认为你最好不要自行解决这个问题。每当你遇到类似的很普遍的问题时,最好的方法是利用现有的库。一个例子就是Underscore String库,特别是如果你已经在使用Underscore。如果没有,还有其他通用的字符串工具库(如String.js)可以使用。
为了确切地测试逗号分隔列表中是否存在精确的字符序列“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);
var stuffArray = str.split(",");
var SearchIndex = stuffArray.indexOf("Apple");
搜索索引(SearchIndex)表示在数组中的位置。如果SearchIndex < 0,则表示未找到该项。
' Apple'
而不是 'Apple'
。 - Karl-André Gagnonvar 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 + '"');
});
在“球,苹果,鼠标,Kindle”中找到了“苹果”
在“球,苹果派,房子,猫”中未找到“苹果”
在“球,苹果,房子,猫”中找到了“苹果”
在“球,Appleby's,桃子,狗”中未找到“苹果”
您可以采用非常简单但容易出错的方式,在逗号分隔的列表中检查字符串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
- 这可能不是您想要的。
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]);
}
}
===
。 - Dave Morrissey这里有另一种使用正则表达式的解决方案
//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!!");
}
var str = "ball,apple,mouse,kindle";
var search = 'apple';
var strArray = str.split(',');
if ($.inArray(search, strArray) !== -1) {
alert('hurrah :)');
}
else {
alert('nothing!');
};
/\s*,\s*/
。编辑 - 不用了,你已经做到了。 - Karl-André Gagnon