Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4

Регулярные выражения. Поиск книг по автору

25.10.2018, 21:36. Показов 1359. Ответов 5

Студворк — интернет-сервис помощи студентам
Необходима помощь. Регулярное выражение (указано ниже)
1) захватывает ненужные одиночные пробелы/табуляцию;
2) не захватывает необходимые выражения (примеры указаны ниже).
Проблема, полагаю, со вторым условием, содержащим номера групп.

Выражение:
JavaScript
1
([^«](Ахматова),?\s(Анна(\sАндреевна)?|(А\.\s?А\.))[^»])|([^«]\3\s\2[^»])
Примеры нужных выражений:
Кликните здесь для просмотра всего текста
Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.

Анна Ахматова
Анна Андреевна Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова

Примеры ненужных выражений:
Кликните здесь для просмотра всего текста
Анна Андреевна
А.Ахматова
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»

Текст (для проверки):
Кликните здесь для просмотра всего текста
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»

..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»

... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый

=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., А.Ахматова - ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
..., Ахматова А.А, ...
..., Ахматова АА. «...»

Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2018, 21:36
Ответы с готовыми решениями:

Поиск книг по автору
Всем доброго времени суток! Есть файл, в который записываются авторы, книги и год издания. Подскажите, пожалуйста, как сделать поиск книг...

Запрос на поиск книг по автору
Здравствуйте...Как организовать поиск книги по автору в SQL server. В аксес просто в конструкторе запроса вводишь в условии отбора ...

База книг. Организовать поиск по автору и году издания
3. База книг. О каждой книге хранится: номер книги, автор, название, год издания, количество страниц. Организовать поиск по автору и году...

5
Невнимательный
 Аватар для ft4l
3109 / 1285 / 359
Регистрация: 08.02.2013
Сообщений: 7,552
Записей в блоге: 2
25.10.2018, 23:46
imho с кавычками проще как-то вне выражения
типа как-то так
//без групп
PHP/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
<div id="x" style="white-space: pre;">
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»
 
..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»
 
... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый
 
=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., А.Ахматова - ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
..., Ахматова А.А, ...
..., Ахматова АА. «...»
 
Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
</div>
<hr/><hr/>
<div id="y" style="white-space: pre;"></div>
<a href="#" onclick="xtest(); return false;">test</a>
<script>
x=document.getElementById('x').innerHTML;
y=document.getElementById('y')
 
re = /(["«]?)(?:(?:А\.\s?){1,2}|Анна(?:\sАндреевна)?\s)Ахматова|Ахматова\s(?:(?:\s?А\.){1,2}|Анна(?:\sАндреевна)?)/g
function xtest(){
    while ( str = re.exec(x)){ if(!str[1]) y.innerHTML += str[0] +"\n";}
}
 
</script>
и, если всё заметил, не совпало только с этим "Ахматова, Анна Андреевна"
,? можно добавить

Добавлено через 10 минут
и А.Ахматова , оно точно не нужно?
1
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4
26.10.2018, 16:58  [ТС]
  1. Группы.
    Данное выражение предполагал сделать, по возможности, менее громоздким:
    - использовать значения фамилии, имени и отчества, их инициалов единожды;
    - при необходимости заменить прочие упоминания отсылками на необходимые группы.
    Будет очень здорово, если получится сократить выражения в соответствии с указанными задумками.
  2. Инициалы.
    Неудачно взял в качестве примера поэтессу с одинаковыми инициалами имени и отчества.
    Данное выражение предполагалось сделать однотипным, подходящим для большинства писателей.
    Поэтому желательно не использовать квантификаторы для инициалов, как в предыдущем варианте.
    Для исключений, например: Толкин, Джон Рональд Руэл (Толкин Дж.Р.Р.) изменю выражение отдельно.
  3. Кавычки.
    В предложенном варианте символы кавычек могут как отсутствовать, так и присутствовать.
    Необходимо, чтобы их однозначно не было на границах искомого выражения.
    Потому как, зачастую, это означает название биографии и мемуаров, написанных другим автором.
    Возможно, стоит применить [^"«] в начале и [^"»] в конце выражения вместо (["«]?).
  4. Результаты поиска.
    Выражение " Ахматова, Анна Андреевна " (без кавычек) встречается достаточно часто.
    Как было верно замечено ft4l, для его захвата можно добавить ,? после фамилии.
    Выражение " А.Ахматова " (без кавычек) встречается относительно редко.
    И всё же, пусть считается нужным. Спасибо, ft4l, за уточнение.
  5. Пояснение ошибок.
    По возможности прошу пояснить ошибки в исходном и/или указанном ниже регулярном выражении.
    [^«"](((Ахматова),?\s(Анна(\sАндреевна)?|(А\. (\sА\.)?)))|(\4\s\3))[^"»]
Исправленные примеры нужных выражений:
Кликните здесь для просмотра всего текста
Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.

Анна Ахматова
Анна Андреевна Ахматова
А.Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова

Исправленные примеры ненужных выражений:
Кликните здесь для просмотра всего текста
Анна Андреевна
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»

Исправленный и дополненный текст для проверки
Кликните здесь для просмотра всего текста
=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ...
..., Ахматова Анна Андреевна - ...
..., Ахматова Анна Андреевна, ...
...; Ахматова Анна Андреевна; ...
..., Ахматова Анна Андреевна: ...
..., Ахматова Анна «...»
..., Ахматова Анна: ...
..., Ахматова А. - ...
..., Ахматова А.А., ...
..., Ахматова А. А. «...»

..., Анна Андреевна Ахматова - ...
...; Анна Андреевна Ахматова; ...
..., Анна Андреевна Ахматова, ...
..., Анна Андреевна Ахматова: ...
..., Анна Ахматова «...»
..., Анна Ахматова: ...
..., А.Ахматова - ...
..., А. Ахматова - ...
..., А.А. Ахматова - ...
..., А. А. Ахматова «...»

... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый

=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
...,Ахматова А.А, ...
...,Ахматова АА. «...»
...,Ахматова А.А.. «...»

Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...
0
Невнимательный
 Аватар для ft4l
3109 / 1285 / 359
Регистрация: 08.02.2013
Сообщений: 7,552
Записей в блоге: 2
26.10.2018, 17:22
Группы в таком смысле предполагают что одинаковые куски совпадают хотя-бы дважды,
а тут получается три куска никак не одинаковых
использование такого (?(1)это:или это) тоже никак не упрощает выражение (непомню есть-ли в Js такое)

кавычки вроде получается контролировать только с последней, т.к. забраковав первую поиск начинается со следующего символа
, хотя и забраковав последнюю, просто позиция сдаёт назад
// Надо-бы освежить свои знания, на Js вообще мало кодил, и последние несколько лет не кодил совсем ни на чём .)

Добавлено через 7 минут
типа "ххх х.(х.)?(?!")" заберёт ххх х
0
0 / 0 / 0
Регистрация: 04.01.2015
Сообщений: 4
28.10.2018, 17:59  [ТС]
Выражение, которое решает необходимую задачу, указано ниже.
JavaScript
1
(Ахматова,?\s(Анна(\sАндреевна)?|А\.(\s?А\.)?)|((Анна(\sАндреевна)?|А\.(\s?А\.)?)\s?Ахматова))(?=\s|:|;|,)(?!"|»|\s»)
  1. Группы.
    К сожалению, данное выражение получилось достаточно громоздким.
    Решить данную задачу с применением групп пока не удалось.
  2. Кавычки.
    Выражение «Анна Ахматова» исключается сугубо при наличии второго символа кавычек (»).
    К сожалению, назад смотрящих утверждений (lookbehind), которые проверяют есть ли что-то перед строкой, в JavaScript нет.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
28.10.2018, 21:14
PsyHo, вы очень много пишете, а главное не пишете - допустим мы нашли на строке Анну Ахматову, номер строки нужно вытащить и поместить в массив?
Весь текст с несколькими Ахматовыми это просто текст? Никаким массивом строк не является?

Добавлено через 1 час 45 минут
PsyHo, а с этой фразой что не так? ...,Ахматова А.А.. «...» Вроде по смыслу всё правильно.

Добавлено через 2 минуты
На тестирование:
PHP/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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script type="module">
        let str = `Ахматова, Анна Андреевна
Ахматова Анна Андреевна
Ахматова Анна
Ахматова А.
Ахматова А.А.
Ахматова А. А.
Анна Ахматова
Анна Андреевна Ахматова
А.Ахматова
А. Ахматова
А.А. Ахматова
А. А. Ахматова`;
 
        let str2 = `Анна Андреевна
АхматоваА.А.
Ахматова АА
"Ахматова Анна"
«Анна Ахматова»`;
 
let str3 =`=== Нужные выражения ===
..., Ахматова, Анна Андреевна - ... 
..., Ахматова Анна Андреевна - ... 
..., Ахматова Анна Андреевна, ... 
...; Ахматова Анна Андреевна; ... 
..., Ахматова Анна Андреевна: ... 
..., Ахматова Анна «...» 
..., Ахматова Анна: ... 
..., Ахматова А. - ... 
..., Ахматова А.А., ... 
..., Ахматова А. А. «...» 
 
..., Анна Андреевна Ахматова - ... 
...; Анна Андреевна Ахматова; ... 
..., Анна Андреевна Ахматова, ... 
..., Анна Андреевна Ахматова: ... 
..., Анна Ахматова «...» 
..., Анна Ахматова: ... 
..., А.Ахматова - ... 
..., А. Ахматова - ... 
..., А.А. Ахматова - ... 
..., А. А. Ахматова «...» 
 
... - А.А. Ахматова, А.А. Блок и др. - ...
... - Блок А.А.; Ахматова А.А.; др. - ...
Ахматова А. А ты теперь тяжелый и унылый
Ахматова А. «А ты теперь тяжелый и унылый»
Ахматова А. - А ты теперь тяжелый и унылый
 
=== Ненужные выражения ===
..., Анна Андреевна, Ахматова, ...
..., АхматоваА.А.: ...
..., Ахматова А; ...
..., Ахматова АА - ...
...,Ахматова А.А, ...
...,Ахматова АА. «...»
...,Ахматова А.А.. «...»
 
Анри Труайя "Анна Ахматова" ...
Анри Труайя «Анна Ахматова», ...`;
 
        function operation(str, f, i, o) {
            let shortI = i.charAt(0) + "\\.",
                shortO = o.charAt(0) + "\\.",
                array = str.split(/\r\n?|\n/),
                regs = [
                    new RegExp(String.raw`(?:^|[-яё"«])${f},?\s+${i}(\s+${o})?(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${f},?\s+${shortI}(\s*${shortO})?(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${i}\s+(${o}\s+)?${f}(?![а-яё"»])`, "ui"),
                    new RegExp(String.raw`(?:^|[-яё"«])${shortI}\s*(${shortO}\s*)?${f}(?![а-яё"»])`, "ui")
                ],
                nums = [];
 
            for (let item of array) {
                let m = regs.some(e => item.match(e));
 
                if (m)
                    console.log(item);
            }
            //console.log(array);
            return nums;
        }
 
        operation(str3, "Ахматова", "Анна", "Андреевна");
    </script>
</body>
</html>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2018, 21:14
Помогаю со студенческими работами здесь

Записи: организовать поиск книг по автору, жанру, году издания
Напишите программу, записывающую в файл прямого доступа инфор- мацию о книге (наименование, жанр, автор(ы),издательсвто, год изда- ния...

Cортировка каталога книг по автору
пыталась отсортировать книги по авторам и вывести все изданные после 2000 года,подскажите что не так? #include &lt;iostream&gt; ...

Привязка 2 книг к одному автору
Есть программа библиотека, и нужно привязать n-книг к одному автору. Чтобы при выборе автора выводило его книги а не только одну. Помогите...

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Регулярные выражения - поиск
Здравствуйте. У меня есть строка, полученная от FTP-сервера: 227 Entering Passive Mode (185,28,20,28,116,36). Как найти число в скобках,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru