Парсинг текста с 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

Знаки фунта/и использовались бы для разделения различных категорий.

Вывод был бы затем определен случайным образом от данного входа, например:

"Поешьте в Starbucks". или "Властелин колец чтения в течение 60 минут". или "Чистый гараж в течение 30 минут".

Действительно ли это выполнимо? Кажется, что это должно быть довольно просто, но я не знаю, где запустить. Какие-либо предложения?

Спасибо,

Albert

6
задан o.k.w 8 January 2010 в 00:54
поделиться

2 ответа

Никаких проблем. Разбиение значения текстового поля на массив на основе символов разрыва строки. Затем по одному элементу массива, сортируя значения по переменным для каждой секции. Наконец, используйте генератор случайных чисел JavaScript, чтобы случайным образом определить, какую из групп выбрать. Выводите значение для пользователя, присваивая его HTML-элементу.

6
ответ дан 8 December 2019 в 13:46
поделиться

Как насчет:

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

11
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: