1

Тема: JScript: регулярные выражения

Есть файл с текстом:

<какой-то текст>
Фраза_1

Тут
несколько
строк

Фраза_2 <какой-то текст>

На JScript надо написать скрипт для создания нового файла со следущим содержанием:

<h2>Фраза_1</h2>
<p>Тут
несколько
строк
</p>

<p><strong>Фраза_2</strong></p>

Помогите написать регулярное выражение для решения этой задачи на JScript.

2

Re: JScript: регулярные выражения

Не понятно чем

Фраза_2 <какой-то текст>

отличается от

Тут
несколько
строк

и от

<какой-то текст>

То есть, как их различить, чтобы они обрабатывались по-разному. Я правильно понял, что все это - отдельные абзацы текста?

С текстом

    Фраза_1

все понятно - заголовок раздела, отдельная строка с отбивкой в несколько символов табуляции вначале (сколько?!)


var text = <получить текст>;
var result = text.replace(/^[ \t]+(.+?)$/g, '<h2>$1</h2>');
<вывести результат>
Крепыш пишет:

Помогите написать регулярное выражение для решения этой задачи на JScript.

Не стоит пытаться решить одним регулярным выражением, используйте несколько.

( 2 * b ) || ! ( 2 * b )

3

Re: JScript: регулярные выражения

Фраза_1 и Фраза_2 - это ключевые фразы. По этим ключевым фразам нужно найти текст, заключённый между ними, который я обозвал "Тут несколько строк".
Между этими фразами может быть несколько абзацев текста.

4

Re: JScript: регулярные выражения

Можно так:

text = text
.replace(/Фраза_1/,"<h2>Фраза_1</h2><p>")
.replace(/Фраза_2/,"</p><p><strong>Фраза_2</strong></p>");

5

Re: JScript: регулярные выражения

Перед Фраза_1 и после Фраза_2 содержится текст, который надо удалить. Вернее, текст после Фраза_2 также надо обработать.

6

Re: JScript: регулярные выражения

В общем, бросьте ссылку на свой файл, а там и разберемся.

7

Re: JScript: регулярные выражения

обзор 17 мая 2011 г.
Вчера

Росссия
Украина

Европа. В Европе...
Америка. В Америке...

Сегодня

Заменить на:

<h2>Вчера</h2>

<p>Росссия
Украина</p>

<p><strong>Европа.</strong> В Европе...</p>

<p><strong>Америка.</strong> В Америке...</p>

<h2>Сегодня</h2>

Жирным выделены фразы, которые не меняются и на которые можно ориентироваться.

8

Re: JScript: регулярные выражения

1) Обработать весть текст через replace, как указано выше
2) Каждый перенос сопроводить </p><p>. Это  что-то вроде text.replace(/\r\n+/g, "</p>\r\n<p>")
3) Далее </h\d></p><p> ==> </h\d><p>   потом то же с убиранием <p> перед <h\d>
4) Убрать первый </p> и последний <p>, если остались

Просто идея обработки. Корректность выражений не проверял.

9

Re: JScript: регулярные выражения

Проблемой для меня является не расстановка тегов, а другое. Я, наверное, непонятно поставил задачу.
Упростим тогда. Имеем текст:

обзор    17 мая 2011 г.
    Вчера   

Росссия
Украина

Европа. В Европе...

Жирным выделены ключевые фразы. Они известны и не меняются. Что между ними - не известно. Так же как не известно сколько там строк.
На выходе нужно получить:

Вчера   

Росссия
Украина

Европа.

Была б между ключевыми фразами была одна строка, я б написал:

Text.match(/Вчера.*Европа\./)

А как быть в данном случае?

10

Re: JScript: регулярные выражения

Ну сколько раз можно постить «Россия» с тремя «с»?

11

Re: JScript: регулярные выражения

Я так до конца и не понял, что же требуется получить, какие требования к "опорным" строкам текста, по которым можно было бы ориентироваться. Будут ли эти строки состоять из слов "Вчера" и "Европа" или могут содержать другие слова. Все объяснения весьма расплывчаты и нечетки. Тем не менее я потратил 15 минут своего времени на составления регулярного выражения, которое вроде бы что-то делает, чтобы как-то соответствовать чему-то запрашиваемому. Больше возвращаться к этой задаче у меня желания не возникает.


var text = <исходный текст>;

var re = /\r\n +(.+?)\s+(?:\r\n){2,}([\s\S]+)(?:\r\n){2,}([^.]+)/;

var m = text.match(re);
// m[1] - "Вчера"
// m[2] - "Росссия\r\nУкраина"
// m[3] - "Европа"
( 2 * b ) || ! ( 2 * b )

12

Re: JScript: регулярные выражения

Спасибо, большое!
Всё получилось с использованием регулярного выражения:

var text = <исходный текст>;
 
var re = /(Вчера)\s*([\S\s]*\S+)\s*(Европа\.)/;
 
var m = text.match(re);
Rumata пишет:

Я так до конца и не понял, что же требуется получить, какие требования к "опорным" строкам текста, по которым можно было бы ориентироваться. Будут ли эти строки состоять из слов "Вчера" и "Европа" или могут содержать другие слова.

Крепыш пишет:

Жирным выделены ключевые фразы. Они известны и не меняются.

Ключевых фраз в исходном тексте много, но они все известны. По ним и надо было разбить текст.