Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Регулярные выражения JavaScri: сопоставить весь текст между двумя строками / 9 сообщений из 9, страница 1 из 1
28.01.2021, 12:37
    #40039611
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Привет всем!
Пытаюсь извлечь несколько строк между двумя строками.
Вот исходный текст:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Select a.id,a.name from action_report a,v_trans_report b  where a.deal_id=:P9 and a.id=b.action_id group by a.id,a.name

P9 = 198

--------------------------------------------------------------------------------------------------------
| Operation                           |  Name                  |  Rows | Bytes|  Cost  | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------
| SELECT STATEMENT                    |                        |    16 |    1K|     12 |       |       |
|  HASH GROUP BY                      |                        |    16 |    1K|     12 |       |       |
|   HASH JOIN                         |                        |    16 |    1K|     11 |       |       |
|    NESTED LOOPS                     |                        |    16 |    1K|      8 |       |       |
|     HASH JOIN                       |                        |   124 |    9K|      8 |       |       |
|      MERGE JOIN CARTESIAN           |                        |    31 |    2K|      5 |       |       |
|       INDEX RANGE SCAN              |XUK_USER_ROLES          |     2 |   16 |      1 |       |       |
|       BUFFER SORT                   |                        |    15 |  930 |      4 |       |       |
|        TABLE ACCESS FULL            |ACTION_REPORT           |    15 |  930 |      2 |       |       |
|      INDEX FAST FULL SCAN           |XPK_TRANS_REPORT        |     1K|   14K|      3 |       |       |
|     INDEX UNIQUE SCAN               |XUK_ROLE_ACTIONS        |     1 |   11 |      0 |       |       |
|    TABLE ACCESS FULL                |ACTION_REPORT           |   406 |    4K|      3 |       |       |
--------------------------------------------------------------------------------------------------------

begin param.ClearParam; end;

begin
  REPORT.DOREPORT(REP_CUR => :REP_CUR, A_DEAL_TYPE_ID => :A_DEAL_TYPE_ID, A_ACTION_ID => :A_ACTION_ID);
end;



Отсюда надо выделить кусок:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--------------------------------------------------------------------------------------------------------
| Operation                           |  Name                  |  Rows | Bytes|  Cost  | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------
| SELECT STATEMENT                    |                        |    16 |    1K|     12 |       |       |
|  HASH GROUP BY                      |                        |    16 |    1K|     12 |       |       |
|   HASH JOIN                         |                        |    16 |    1K|     11 |       |       |
|    NESTED LOOPS                     |                        |    16 |    1K|      8 |       |       |
|     HASH JOIN                       |                        |   124 |    9K|      8 |       |       |
|      MERGE JOIN CARTESIAN           |                        |    31 |    2K|      5 |       |       |
|       INDEX RANGE SCAN              |XUK_USER_ROLES          |     2 |   16 |      1 |       |       |
|       BUFFER SORT                   |                        |    15 |  930 |      4 |       |       |
|        TABLE ACCESS FULL            |ACTION_REPORT           |    15 |  930 |      2 |       |       |
|      INDEX FAST FULL SCAN           |XPK_TRANS_REPORT        |     1K|   14K|      3 |       |       |
|     INDEX UNIQUE SCAN               |XUK_ROLE_ACTIONS        |     1 |   11 |      0 |       |       |
|    TABLE ACCESS FULL                |ACTION_REPORT           |   406 |    4K|      3 |       |       |
--------------------------------------------------------------------------------------------------------



Какое регулярное выражение будет соответствовать для этого?

Я смог составить только это: (?<=^-+\n)[\S\s]*(?=^-+\n)

Заранее спасибо!
...
Рейтинг: 0 / 0
28.01.2021, 13:08
    #40039618
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Alimkulov,

Зачем регулярки? Тебя перловики покусали?

https://jsfiddle.net/fkmuobh9/

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
var txt=`Select a.id,a.name from action_report a,v_trans_report b  where a.deal_id=:P9 and a.id=b.action_id group by a.id,a.name

P9 = 198

--------------------------------------------------------------------------------------------------------
| Operation                           |  Name                  |  Rows | Bytes|  Cost  | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------
| SELECT STATEMENT                    |                        |    16 |    1K|     12 |       |       |
|  HASH GROUP BY                      |                        |    16 |    1K|     12 |       |       |
|   HASH JOIN                         |                        |    16 |    1K|     11 |       |       |
|    NESTED LOOPS                     |                        |    16 |    1K|      8 |       |       |
|     HASH JOIN                       |                        |   124 |    9K|      8 |       |       |
|      MERGE JOIN CARTESIAN           |                        |    31 |    2K|      5 |       |       |
|       INDEX RANGE SCAN              |XUK_USER_ROLES          |     2 |   16 |      1 |       |       |
|       BUFFER SORT                   |                        |    15 |  930 |      4 |       |       |
|        TABLE ACCESS FULL            |ACTION_REPORT           |    15 |  930 |      2 |       |       |
|      INDEX FAST FULL SCAN           |XPK_TRANS_REPORT        |     1K|   14K|      3 |       |       |
|     INDEX UNIQUE SCAN               |XUK_ROLE_ACTIONS        |     1 |   11 |      0 |       |       |
|    TABLE ACCESS FULL                |ACTION_REPORT           |   406 |    4K|      3 |       |       |
--------------------------------------------------------------------------------------------------------

begin param.ClearParam; end;

begin
  REPORT.DOREPORT(REP_CUR => :REP_CUR, A_DEAL_TYPE_ID => :A_DEAL_TYPE_ID, A_ACTION_ID => :A_ACTION_ID);
end;
`

var out = txt.split("\n").filter(v=>v.startsWith("-") || v.startsWith("|")).join("\n")
console.log(out);





Может тебе еще эту табличку распарсить надо? Подумай, пока я тут.
...
Рейтинг: 0 / 0
28.01.2021, 13:55
    #40039627
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Alimkulov
Какое регулярное выражение будет соответствовать для этого?

Например такое...

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='https://pre.jquery.com/jquery-latest.js'></script>
-->
<style type='text/css'>
pre {
	border: 1px solid;
}
</style>
<script type='text/javascript'>
</script>
</head>
<body>
<pre id='test'>
Select a.id,a.name from action_report a,v_trans_report b  where a.deal_id=:P9 and a.id=b.action_id group by a.id,a.name

P9 = 198

--------------------------------------------------------------------------------------------------------
| Operation                           |  Name                  |  Rows | Bytes|  Cost  | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------
| SELECT STATEMENT                    |                        |    16 |    1K|     12 |       |       |
|  HASH GROUP BY                      |                        |    16 |    1K|     12 |       |       |
|   HASH JOIN                         |                        |    16 |    1K|     11 |       |       |
|    NESTED LOOPS                     |                        |    16 |    1K|      8 |       |       |
|     HASH JOIN                       |                        |   124 |    9K|      8 |       |       |
|      MERGE JOIN CARTESIAN           |                        |    31 |    2K|      5 |       |       |
|       INDEX RANGE SCAN              |XUK_USER_ROLES          |     2 |   16 |      1 |       |       |
|       BUFFER SORT                   |                        |    15 |  930 |      4 |       |       |
|        TABLE ACCESS FULL            |ACTION_REPORT           |    15 |  930 |      2 |       |       |
|      INDEX FAST FULL SCAN           |XPK_TRANS_REPORT        |     1K|   14K|      3 |       |       |
|     INDEX UNIQUE SCAN               |XUK_ROLE_ACTIONS        |     1 |   11 |      0 |       |       |
|    TABLE ACCESS FULL                |ACTION_REPORT           |   406 |    4K|      3 |       |       |
--------------------------------------------------------------------------------------------------------

begin param.ClearParam; end;

begin
  REPORT.DOREPORT(REP_CUR => :REP_CUR, A_DEAL_TYPE_ID => :A_DEAL_TYPE_ID, A_ACTION_ID => :A_ACTION_ID);
end;
</pre>
<pre id='result'>
</pre>
<script type='text/javascript'>
var txt=document.getElementById('test').innerText;
var reg=/-[\s\S]+?(?=\n\n)/gm;
txt=txt.match(reg)
document.getElementById('result').innerText=txt;
</script>
</body>
</html>
...
Рейтинг: 0 / 0
28.01.2021, 14:32
    #40039638
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
crutchmaster,
Спасибо за ответ!
Данного регулярки нужно и еще других части проекта
...
Рейтинг: 0 / 0
28.01.2021, 14:33
    #40039639
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
krvsa,
Спасибо большое! Оно самое!

-[\s\S]+?(?=\n\n)
...
Рейтинг: 0 / 0
28.01.2021, 14:35
    #40039640
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
krvsa,
Сможете коротко объяснить выражению ?

-[\s\S]+?(?=\n\n)

-[\s\S]+ - это найдет строку где начинается с -

? - это я не понял

?(?=\n\n) - Это похож на (x(?=y))
...
Рейтинг: 0 / 0
28.01.2021, 15:58
    #40039670
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Alimkulov , это называется не жадный поиск...
автор ?
Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, /e?le?/ найдет 'el' в "angel" и 'le' в "angle."Если используется сразу после одного из квантификаторов *, +, ?, или {}, то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит.Кроме того, ? используется в предпросмотре, который описан в таблице под (?=), (?!), и (?: ).
https://javascript.ru/RegExp
...
Рейтинг: 0 / 0
28.01.2021, 16:04
    #40039672
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Т.е. я ищу вот это (не жадно)
Код: javascript
1.
-[\s\S]+?


Но не просто так, а если после него находится две подряд "перевод строки"
Код: javascript
1.
(?=\n\n)
...
Рейтинг: 0 / 0
28.01.2021, 17:12
    #40039688
Alimkulov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
Понял, спасибо!
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Регулярные выражения JavaScri: сопоставить весь текст между двумя строками / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]