我正在对网页进行小规模解析。 我有一段代码:
var names:Array = pageText.match(namePattern);
for (i=0; names.length>i; i++)
{
if (names[i].search("show") != -1)
{
names[i] = names[i].slice(names[i].search(additionalNamePattern) + 2,-4);
}
trace((names[i].toString()==names[i] ? 'true': 'false'),typeof names[i], ': ', names[i]);
//Gives: true string : <span class="title">Dancing Queen </span><span class="
trace(typeof names[i].replace , ': ',names[i].replace);
//Gives: function : function Function() {}
if (names[i])
{
trace(names[i].replaсe("a","b"));
//Gives Error TypeError: Error #1006: value is not a function.
}
显然,问题是为什么会引起错误。我已经尝试了
"abc".replace("b", "c")
它有效。
trace(typeof "abc".replace , ': ',"abc".replace);
给出
function : function Function() {}
答案 0 :(得分:1)
很好奇,但是如果你做了以下事情会发生什么:
//place this at the top:
import flash.utils.getQualifiedClassName;
// this line will make sure that everything is a String (req's Flash 10.x)
var names:Vector.<String> = Vector.<String>(pageText.match(namePattern));
trace(getQualifiedClassName(names[i]))
if (names[i])
{
trace(String(names[i]).replaсe("a","b"));
}
我知道,那些不应该重要,但AS3有一些怪癖。我在AS2中看到了一些类似的行为,虽然这些行为是由我修复的,但我想知道AS3是否会不一样。
答案 1 :(得分:1)
只是提醒一下:获取String.replace的'typeof'将返回'function',因为它就是这样......你需要使用()来执行函数,从而得到返回的结果。
replace()=“运行此功能”
replace =函数本身的名称。
答案 2 :(得分:0)
尝试更改。
for (i=0; names.length>i; i++){
to
for each( var name:String in names ){
然后将所有引用更改为
names[i].
change to
name.
由于这会将演员姓名键入String,因此可以帮助您找到问题
我不得不承认你的代码很邋。
也许如果你告诉我们你想要实现的目标,我们会更清洁。
答案 3 :(得分:0)
谢谢大家的答案!
解决方案很奇怪也很有趣。我不得不重新打印replace
这个词,它开始正确编译。我刚刚将replaсe
更改为replace
。
之后我检查了它并且说了这些话中有两个不同的字母。第一个单词的最后两个是俄文字母。