所以我有这些代码,我想要做的是解析两个单词之间的内容,例如: “开始中间结束”应该回到中间位置。 如果句子是“开始中间结束。开始mid2结束”,它应该返回一个包含“middle”和“middle2”的数组。
问题是:
当我调用名为FindAll的函数时,我得到了Undefined Object。我用来测试它的警报也说任何参数都等于未定义的对象
你可以在你的萤火虫上运行它,你会看到。
function findWithin(text, start, end, include) {
"use strict";
var stringExists = (text.indexOf(end) === -1),
startPosition = text.indexOf(start),
endPosition = text.indexOf(end),
tMatch = [2];
tMatch[0] = text.slice(endPosition + end.length, text.length);
if (!stringExists) {
if (include) {
tMatch[1] = text.slice(startPosition, endPosition + end.length);
} else {
tMatch[1] = text.slice(startPosition + start.length, endPosition);
}
} else {
tMatch[2] = false;
}
return tMatch;
}
function findAll(text, start, end, include) {
"use strict";
alert(toString(end));
var findWithinVar = findWithin(text, start, end, include),
occurrences = [],
i = 0;
// alert(toString(findWithinVar[2]));
for (i; findWithinVar[2]; i++) {
occurrences[i] = findWithinVar[1];
findWithinVar = findWithin(text, start, end, include);
}
return occurrences;
}
var text = "Start middle end. Start middle end. Start middle end.",
start = "Start",
end = "end",
result = findAll(text, start, end, false);
答案 0 :(得分:1)
问题在于您的toString
方法。这不是你的想法。只需将end
传递给alert()
即可。
alert(end);
您使用的toString()
是window.toString
。我不知道这是否是一种标准方法,但它基本上是Object.prototype.toString
的捷径。
调用Object.prototype.toStirng
时,它希望其this
值成为某个对象,它将返回其内部[[Class]]
属性。由于您没有设置this
值,因此您返回[object Undefined]
,因为您处于严格模式。
如果您这样做了:
toString.call(end)
它会返回[object String]
,这本来是正确的,但不是你想要的。