powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
9 сообщений из 9, страница 1 из 1
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
    #40039611
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Пытаюсь извлечь несколько строк между двумя строками.
Вот исходный текст:
Код: 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
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
    #40039618
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
    #40039627
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
    #40039638
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Спасибо за ответ!
Данного регулярки нужно и еще других части проекта
...
Рейтинг: 0 / 0
Регулярные выражения JavaScri: сопоставить весь текст между двумя строками
    #40039639
Alimkulov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,
Спасибо большое! Оно самое!

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

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

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

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

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


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


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