JS RegEx для нахождения количества строк на странице, разделенных фидом \ f - PullRequest
0 голосов
/ 29 октября 2019

У меня есть сценарий использования, в котором текстовый файл должен содержать не более 38 символов, а «страницы» - не более 28 строк. Для обеспечения этого я использую регулярные выражения. Я смог установить длину строки без каких-либо проблем, но длина страницы оказалась намного хитрее. После нескольких итераций я пришел к следующему регулярному выражению, которое, по моему мнению, должно работать, но это не так.

let expression = /(([^\f]*)(\r\n)){29,}\f/;

Это просто не приводит к совпадениям.

Если кто-то можетоставить отзыв, я очень признателен! - Джейкоб

Редактировать 1 - убрать блок кода вокруг второго выражения, возможно, это сбивало меня с толку.

Редактировать 2 - удалить следующий текст, это не уместно: Для сравнения, следующее выражениеРезультаты в одном совпадении, весь документ. Я предполагаю, что он соответствует всем строкам вплоть до последнего выражения let = /(.*(\r\n))‹29, Event

Редактировать 3 - Итак, подумав, я понял, что моя проблемаиз-за начального раздела регулярного выражения, который соответствует любым символам до новой строки, включая новые строки. Поэтому я считаю, что мне нужно сопоставить любые символы перед новой строкой, КРОМЕ (\ f \ r \ n). Тем не менее, у меня сейчас есть проблемы с реализацией этого. Я попробовал следующее:

let expression = /([^\f^\r^\n]*(\r\n)){29,}\f/;

Но это также не соответствует. Я предполагаю, что мои отрицания неверны ...

Правка 4 - У меня есть следующее регулярное выражение, соответствующее каждой строке: let expression = /([^\f\r\n]{0,}(\r\n))/; Это довольно близко к тому, что я хочу. Все, что мне сейчас нужно, это сопоставить любые экземпляры из 29 или более строк, за которыми следует \ f

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Спасибо за помощь тем, кто прокомментировал, друг закончил тем, что помог мне получить окончательное регулярное выражение

let expression = /([^\f\r\n]*?\r??\n){29,}?\f/;
0 голосов
/ 29 октября 2019

Редактировать:

Когда вы уточнили свою проблему и предоставили обновленное регулярное выражение:

/([^\f^\r^\n]*(\r\n)){29,}\f/;

Ваши отрицания не здесь, используйте [^\f\r\n]вместо [^\f^\r^\n]. Это сведет на нет все \f, \r и \n.

Итак, ваше регулярное выражение становится:

/([^\f\r\n]*(\r\n)){29,}\f/;

Это будет соответствовать 29 или более строкам символов (чтоможет быть чем угодно, кроме \f, \r или \n), за всем этим следует один \f.


Оригинальный ответ:

Ваше текущее регулярное выражение:

let expression = /(([^\f]*)(\r\n)){29,}\f/;

Соответствует строкам, состоящим из 29 или более строк (разделенных \r\n), за которыми следует одна единственная \f.

Насколько я понял, вы хотите, чтобы каждая из ваших строк заканчивалась \f. Вы хотели включить \f внутрь?

let expression = /(([^\f]*)(\r\n\f)){29,}/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...