如何在不包含令牌的字符串上调用split(token)而不会导致错误?

时间:2009-07-20 16:18:00

标签: javascript jquery stringtokenizer string-parsing

我有两种类型的字符串作为HTML标记中元素的ID:

日期:

"april-23"
"march-20"

和季节名称:

"springtime"
"winter"

日期分隔了月份和日期。

季节是一个单词,没有其他令牌。

我想将月份或季节分配给名为:

的新变量
time_of_year

如果我这样做:

var time_of_year = $(this).attr("id").split('-')[0];

它会在几个月内起作用,但是如果我在一个不包含令牌的季节名称上调用它,它会产生错误吗?

这样做的安全方法是什么?

3 个答案:

答案 0 :(得分:4)

它不会返回错误,但会返回长度为1的数组。

你可以这样做:

var splitty = $(this).attr('id').split('-');
if (splitty.length > 1) {
   time_of_year = splitty[0];
}
else {
   // do something else magical here
}

以下是split上的文档。

但是,如果您总是想要第一个值并且不关心其他值,那么您可以使用原始代码而不会出现问题:

var time_of_year = $(this).attr('id').split('-')[0]

答案 1 :(得分:3)

您可以使用mystring.indexOf('-')检查连字符是否存在(如果不存在则返回-1)。但我很确定如果你在不包含该字符的字符上拆分字符串,它将只返回原始字符串。

答案 2 :(得分:0)

为什么不在执行拆分之前添加连字符?无论如何,你正在抓住第一个元素。如果它是两个中的第一个或三个元素中的第一个,那有什么区别?

var time_of_year = $((this).attr(“id”)+' - x')。split(' - ')[0];

这样你就抓住了第一个连字符左边的项目,并且总会有第一个连字符:

“四月-23-X” “春天-X”

(注意,我没有对此进行测试,也没有在语法上吝啬我的生活!但也许这对你来说是个新主意。)

编辑:顺便说一句,我认为原帖中的例子无论如何都会有用。 Split应该返回一个长度为1的列表,并且你正在抓取[0]'元素,这是完美的。