2010-01-08 133 views
6

我正在尝试使用Javascript解析已输入文本框中的文本 - 这将结合各种用户生成的变量来创建随机活动。这可能会更有意义看这个例子。一些示例输入可能是:使用Javascript解析文本

Activity 
@Home 
@Out 

@Home 
Read @book for @time 
Clean up @room for @time 

@Out 
Eat at at @restaurant 

@book 
Enders Game 
Lord of the Rings 

@room 
bedroom 
garage 
basement 

@restaurant 
Red Robin 
McDonalds 
Starbucks 

@time 
15 minutes 
30 minutes 
45 minutes 
60 minutes 

磅/和标志将被用来分隔不同的类别。

输出随后将被随机地确定从给定输入,例如:“吃在星巴克”

或 “阅读指环王60分钟。” “清洁车库30分钟”。

这是可行的吗?它似乎应该是相当直接的,但我不知道从哪里开始。有什么建议么?

感谢,

阿尔伯特

+0

解析?你的意思是像自动完成或我在这里错过了点? – 2010-01-08 00:52:48

+0

我的意思是让javascript查看文本并分析它,例如,当涉及到一个变量(在这里指定为“@”时,它将跳转到可能的“答案”列表那个变量,选择一个随机的,然后把整个结果作为一个字符串返回。 – Albert 2010-01-08 01:01:49

+0

我看到了,好人在这里已经为你编码了东西,祝你好运! – 2010-01-08 01:04:09

回答

5

没有问题。根据换行符将文本框值拆分为数组。然后,一次遍历数组一个元素,将值排序为每个部分的变量。最后,使用JavaScript的随机数生成器来随机确定要选择哪个组。通过将值分配给HTML元素来输出给用户。

+0

有道理在你的评论和Mene的我想我可以把东西拼凑在一起。 ! – Albert 2010-01-08 01:09:12

10

如何:

var myText = ...; // Input text 
var lines = myText.split("\n"); 
var numLines = lines.length; 
var i; 
var currentSection; 
var sections = Array(); 
var phrases = Array(); 

// parse phrases 
for (i = 0; i < numLines; i++) { 
    var line = lines[i]; 
    if (line.indexOf('@') == 1) { 
    // start of e.g. time section, handled in nex loop 
    break; 
    } else { 
    // phrase 
    phrase.push(line); 
    } 
} 

// parse sections 
for (; i < numLines; i++) { 
    var line = lines[i]; 
    if (line.indexOf('@') == 1) { 
    // start of next section, handled in nex loop 
    currentSection = line; 
    sections[currentSection] = new Array(); 
    } else { 
    // add section entry 
    sections[currentSection].push(line); 
    } 
} 

这不是太复杂,但做这项工作。虽然没有测试过,但像这样的东西应该工作。如果这只是工作,这里的乐趣在哪里; D

+0

谢谢 - 这将是没有乐趣的; P时间开始搞乱! – Albert 2010-01-08 01:08:31

+2

lines.size应该是lines.length – Samuel 2012-07-06 15:08:33

+0

谢谢,我编辑了它 – Mene 2012-07-18 11:57:31