Можно ли зациклить несколько строк текста с помощью RegEx и обернуть каждую строку в некоторый контекстный HTML? - PullRequest
0 голосов
/ 17 марта 2011

Мне стало довольно удобно использовать RegEx в моих маленьких javascript-приложениях / плагинах, но сейчас мне бы хотелось, чтобы RegEx мог сэкономить мне много времени, выполнив следующие действия:

У меня длинный текстфайл, отформатированный следующим образом:

Area which can contain spaces
Address which contains spaces and special characters
Phone Number
(empty line)
Area... (repeats the same structure as above)

Вот краткая выдержка:

Ponsonby
114 Ponsonby Rd Open Til 3Am Friday & Saturday
09 3786466

Queen St
291 Queen St (Next to Bor Ders)
09 3090660

Sylvia Park
Sylvia Park Shopping Complex (286 Mt Wellington Highway)
09 5730100

Я знаю, что нужно обернуть это следующим образом:

<li class="item">
    <p class="phone">09 3786466</p>
    <div class="location">
        <strong>Ponsonby</strong>
        <p class="address">114 Ponsonby Rd Open Til 3Am Friday & Saturday</p>
    </div>
</li>

Можно ли каким-либо образом запустить RegEx, чтобы найти информацию о каждой строке и цикл для моего содержимого, оборачивая вещи в этот тип разметки?

Кстати, я использую TextMate в случае, если это имеет значение.

До сих пор моя идея заключалась в следующем (что не работает):

([.\w\s]+)\n
([\w\s\b.]+)\n
([\d ]+)$\n
\n

И тогда в заменяющей части у меня будет

<li class="item">
    <p class="phone">$3</p>
    <div class="location">
        <strong>$1</strong>
        <p>$2</p>
    </div>
</li>

Любая помощь будетБуду очень признателен.

Спасибо за чтение.

Яннис

1 Ответ

3 голосов
/ 17 марта 2011

Эта проверенная функция должна помочь:

function process_data(text)
{ // HTML-ify some data
    var re = /(\S.*)\r?\n(\S.*)\r?\n([\d \-]+)(?=\r?\n[ ]*\r?\n|\s*$)/g;
    var rep_str = "<li class=\"item\">\n" +
        "    <p class=\"phone\">$3</p>\n" +
        "    <div class=\"location\">\n" +
        "        <strong>$1</strong>\n" +
        "        <p>$2</p>\n" +
        "    </div>\n" +
        "</li>\n";
    return text.replace(re, rep_str);
}
...