RegEx для создания абзацев после каждого N символов - PullRequest
0 голосов
/ 19 мая 2019

У меня есть длинная строка (параграф) с несколькими предложениями, разделенными точкой.Я хочу преобразовать его в несколько абзацев.правило считается от начала строки и находит первую точку после 250-го символа и помещает lineBreak после него.снова посчитайте от этого вновь созданного lineBreak и найдите первую точку после 250-го символа и поместите lineBreak после него и так далее!

orginalString = 'Lorem ipsum dolor sit amet, eu ius everti consequat instructior, sed modus vitae nostrud cu, ad. principes iracundia efficiendi pro. Et eam movet iudico ancillae. Ei mucius invidunt assueverit sit, nostrum oportere ne ius, qui similique scripserit heus et. Eam an tota mollis placerat, an quem voluptua appellantur est.Stet movet quaerendum his ea. Eum facete consequuntur ea, in vix liber quodsi. Percipit moderatius his et, id viderer salutandi vix. Scaevola suscipiantur id quo, ne eirmod consetetur cotidieque sit. Habemus noluisse ex ius.Cum ut dicant everti. Per ad vero exerci. Dolor eruditi eu eos. Alii fugit iisque sea ei, ponderum theophrastus concludaturque nec in. Eam ea modo dolores, has case pericula forensibus id.Laudem appetere senserit qui eu, pro ut essent euripidis. Vim ut elit utinam ridens, his facilis placerat eu. Mel omnis causae eripuit ei, mel no cibo essent temporibus, an quot efficiantur mea. Cu duo diam errem accommodare, nisl posse equidem an vis, his no omnes partem.'

и вот последняя строка th:

finalString = 'Lorem ipsum dolor sit amet, eu ius everti consequat instructior, sed modus vitae nostrud cu, ad. principes iracundia efficiendi pro. Et eam movet iudico ancillae. Ei mucius invidunt assueverit sit, nostrum oportere ne ius, qui similique scripserit heus et.
 Eam an tota mollis placerat, an quem voluptua appellantur est.Stet movet quaerendum his ea. Eum facete consequuntur ea, in vix liber quodsi. Percipit moderatius his et, id viderer salutandi vix. Scaevola suscipiantur id quo, ne eirmod consetetur cotidieque sit.
 Habemus noluisse ex ius.Cum ut dicant everti. Per ad vero exerci. Dolor eruditi eu eos. Alii fugit iisque sea ei, ponderum theophrastus concludaturque nec in. Eam ea modo dolores, has case pericula forensibus id.Laudem appetere senserit qui eu, pro ut essent euripidis.
 Vim ut elit utinam ridens, his facilis placerat eu. Mel omnis causae eripuit ei, mel no cibo essent temporibus, an quot efficiantur mea. Cu duo diam errem accommodare, nisl posse equidem an vis, his no omnes partem.'

Как мне решить эту проблему?

Ответы [ 4 ]

1 голос
/ 19 мая 2019

Следующее регулярное выражение делает трюк:

originalString = 'Lorem ipsum dolor sit amet, eu ius everti consequat instructior, sed modus vitae nostrud cu, ad. principes iracundia efficiendi pro. Et eam movet iudico ancillae. Ei mucius invidunt assueverit sit, nostrum oportere ne ius, qui similique scripserit heus et. Eam an tota mollis placerat, an quem voluptua appellantur est.Stet movet quaerendum his ea. Eum facete consequuntur ea, in vix liber quodsi. Percipit moderatius his et, id viderer salutandi vix. Scaevola suscipiantur id quo, ne eirmod consetetur cotidieque sit. Habemus noluisse ex ius.Cum ut dicant everti. Per ad vero exerci. Dolor eruditi eu eos. Alii fugit iisque sea ei, ponderum theophrastus concludaturque nec in. Eam ea modo dolores, has case pericula forensibus id.Laudem appetere senserit qui eu, pro ut essent euripidis. Vim ut elit utinam ridens, his facilis placerat eu. Mel omnis causae eripuit ei, mel no cibo essent temporibus, an quot efficiantur mea. Cu duo diam errem accommodare, nisl posse equidem an vis, his no omnes partem.';
// Regex pattern
// .{250} // 250 characters
// .*?\.  // followed by the shortest sequence of characters before a '.'
pattern = /(.{250}.*?\.)/g;
finalString = originalString.replace(pattern, "$1\n");
console.log(finalString);
0 голосов
/ 19 мая 2019

Вы можете получить свой матч, не используя группу захвата и не жадный квантификатор, используя отрицательный класс символов .

В заменить вы можете использовать $& для вставки соответствующей подстроки, за которой следует новая строка \n

.{250}[^.]+\.
  • .{250} Соответствует любому символу, кроме новой строки 250 раз
  • [^.]* Соответствие 0+ раз, а не точка (используйте [^.\n]*, чтобы также исключить соответствие новой строки)
  • \. Совпадение с точкой

Regex demo

let orginalString = 'Lorem ipsum dolor sit amet, eu ius everti consequat instructior, sed modus vitae nostrud cu, ad. principes iracundia efficiendi pro. Et eam movet iudico ancillae. Ei mucius invidunt assueverit sit, nostrum oportere ne ius, qui similique scripserit heus et. Eam an tota mollis placerat, an quem voluptua appellantur est.Stet movet quaerendum his ea. Eum facete consequuntur ea, in vix liber quodsi. Percipit moderatius his et, id viderer salutandi vix. Scaevola suscipiantur id quo, ne eirmod consetetur cotidieque sit. Habemus noluisse ex ius.Cum ut dicant everti. Per ad vero exerci. Dolor eruditi eu eos. Alii fugit iisque sea ei, ponderum theophrastus concludaturque nec in. Eam ea modo dolores, has case pericula forensibus id.Laudem appetere senserit qui eu, pro ut essent euripidis. Vim ut elit utinam ridens, his facilis placerat eu. Mel omnis causae eripuit ei, mel no cibo essent temporibus, an quot efficiantur mea. Cu duo diam errem accommodare, nisl posse equidem an vis, his no omnes partem.'
pattern = /.{250}[^.]+\./gm;
console.log(orginalString.replace(pattern, "$&\n"));
0 голосов
/ 19 мая 2019

Здесь мы могли бы сделать это, однако это может не работать с определенными точками, такими как et., etc. и i.e., которые вы, возможно, захотите исключить:

(((.+?){0,250})(\s)(.*?)([.\sA-Z]+?))

Мы добавили правую границу, чтобы проверить, будет ли это конец предложения с большей вероятностью:

([.\sA-Z]+?)

Захват групп также помогает просто вызывать нужные выходы.

enter image description here

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить выражения в regex101.com .

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

Демонстрация JavaScript

const regex = /(((.+?){0,250})(\s)(.*?)([.\sA-Z]+?))/gm;
const str = `Lorem ipsum dolor sit amet, eu ius everti consequat instructior, sed modus vitae nostrud cu, ad. principes iracundia efficiendi pro. Et eam movet iudico ancillae. Ei mucius invidunt assueverit sit, nostrum oportere ne ius, qui similique scripserit heus et. Eam an tota mollis placerat, an quem voluptua appellantur est.Stet movet quaerendum his ea. Eum facete consequuntur ea, in vix liber quodsi. Percipit moderatius his et, id viderer salutandi vix. Scaevola suscipiantur id quo, ne eirmod consetetur cotidieque sit. Habemus noluisse ex ius.Cum ut dicant everti. Per ad vero exerci. Dolor eruditi eu eos. Alii fugit iisque sea ei, ponderum theophrastus concludaturque nec in. Eam ea modo dolores, has case pericula forensibus id.Laudem appetere senserit qui eu, pro ut essent euripidis. Vim ut elit utinam ridens, his facilis placerat eu. Mel omnis causae eripuit ei, mel no cibo essent temporibus, an quot efficiantur mea. Cu duo diam errem accommodare, nisl posse equidem an vis, his no omnes partem.`;
const subst = `\n    $1\n\n`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);
0 голосов
/ 19 мая 2019

finalString = orginalString.replace (/ (. {250}) (. *?) ./ g, '$ 1 $ 2. \ N')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...