RegEx用于在每N个字符后创建段落

时间:2019-05-19 13:54:17

标签: javascript regex

我有一个长字符串(段落),其中有多个句子用点分隔。 我想将其转换为多个段落。 规则是从字符串的开头算起,找到第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.'

这是最后一个字符串:

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 个答案:

答案 0 :(得分:1)

以下正则表达式可以解决问题:

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);

答案 1 :(得分:0)

在这里,我们也许可以做到,但是它可能不适用于某些点,例如et.etc.i.e.,您可能希望将其排除在外:< / p>

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

我们添加了一个右边界,以检查这是否是概率较高的句子的结尾:

([.\sA-Z]+?)

捕获组还有助于简单地调用所需的输出。

enter image description here

RegEx

如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。

RegEx电路

您还可以在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);

答案 2 :(得分:0)

您可以不使用捕获组和使用negated character class的非贪婪量词来获得匹配。

replace中,您可以使用$&插入匹配的子字符串,然后插入换行符\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"));

答案 3 :(得分:-1)

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