- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是与 How to split a string at every n characters or to nearest previous space 类似的问题,但是,与我根据标题所期望的相反,如果只有一个没有任何空格的长单词,该解决方案将不起作用。
所以我需要一个正则表达式,它将一个字符串拆分为单独的行(如果需要,可以多次拆分)按每行的最大字符数,并且向后看 n 个字符表示可能的空格(如果找到则在此处中断,否则为最大长度)?
编辑 1: 例如,最大行长度为 30 个字符和 15 个字符向后空白查找:
Loremipsumissimplydummytextofthe printing and typesetting industry.
该句子的第一个单词长度为 32 个字符。所以输出应该是:
Loremipsumissimplydummytextoft # Line has length of 30 char
he printing and typesetting # Cut before the word at otherwise 30 char
industry.
因此第 30 个字符后第一个单词应该被强制剪切,因为没有空格。
剩余的字符串在单词“industry”之前的长度为 28(或带破折号的 29),因此在第 30 个字符处有一个单词,因此解决方案会在 15 个字符范围内查找前一个空格。该行在“行业”一词之前断开。
编辑 2: 第二个文本示例:
Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry. Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry.
应该输出:
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
Loremipsumissimplydummytextoft
he printing and typesetting
industry. Loremipsumis simply
dummytext ofthe printing and
typesetting industry.
此正则表达式的用例是将长字符串格式化为可读文本,并强制执行最大行长度并且行以字符而不是空格开头。
可选要求:在初始发布后,我在编辑 1 中添加了该示例,我还添加了一个可选要求,即在下一行的开头添加破折号“-”字符,如果一个词是以最大线长切割。我现在将其从示例中删除,并将其作为单独的可选要求添加到此处。
所以一个可选的要求:如果一行在最大长度的中间单词而不是空格处断开,那么应该在该行的末尾附加一个破折号(而不是在下一行的开头,因为我最初描述过)。
Loremipsumissimplydummytextoft- # Line length 30+1 char with an appended a dash
he printing and typesetting # Cut before the word at otherwise 30 char
industry.
最佳答案
你可以使用
var s = "Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry. Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry.";
var regex = /\s*(?:(\S{30})|([\s\S]{1,30})(?!\S))/g;
console.log(
s.replace(regex, function($0,$1,$2) { return $1 ? $1 + "-\n" : $2 + "\n"; } )
)
详情
\s*
- 0 个或多个空白字符。(?:
- 非捕获组的开始:
(\S{30})
- 第 1 组(在回调方法中使用 $1
变量引用):三十(n
) 非空白字符|
- 或者([\s\S]{1,30})(?!\S))
- 第 2 组(在回调中使用 $2
变量引用方法):任何一到三十 (n
) 个字符,尽可能多,但不要紧跟非空白字符。函数($0,$1,$2) { 返回 $1 ? $1 + "-\n": $2 + "\n"; }
部分表示如果第 1 组匹配(即我们匹配了一个被分成两部分的很长的单词),我们将匹配替换为第 1 组值 + 连字符和一个换行符。否则,如果第 2 组匹配,我们将替换为第 2 组值 + 换行符。
符合 ES6+ 的代码片段:
const text = "Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry. Loremipsumissimplydummytextofthe printing and typesetting industry. Loremipsumis simply dummytext ofthe printing and typesetting industry.";
const lineMaxLen = 30;
const wsLookup = 15; // Look backwards n characters for a whitespace
const regex = new RegExp(String.raw`\s*(?:(\S{${lineMaxLen}})|([\s\S]{${lineMaxLen - wsLookup},${lineMaxLen}})(?!\S))`, 'g');
console.log(
text.replace(regex, (_, x, y) => x ? `${x}-\n` : `${y}\n`)
);
关于javascript - 正则表达式/JavaScript : Split string to separate lines by max characters per line with looking n chars backwards for a possible whitespace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60262319/
当前问题陈述的输入是 - 输入.txt #START_OF_TEST_CASES #DATA key1:VA1 key2:VA2 key3:VA3 key4:VA4 key5:VA5 #DEND #E
编辑:添加了 PDO 调用。 这是实际的错误: Notice: Object of class PDOStatement could not be converted to int in Unknow
“git diff --stat”和“git log --stat”显示如下输出: $ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56
我有一个具有以下格式的输入文件:安大略省:布兰普顿:北纬 43° 41':西经 79° 45'安大略省:多伦多:北纬 43° 39':西经 79° 23'魁北克省:蒙特利尔:北纬 45° 30':西经
空白行仅包含\n或\r\n或\r。 tempfile = open(file,"r") for id,line in enumerate(tempfile): if(line != "\n"
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
有一个while read循环: while read line; do grep "^$line" file1 done < target 我应该使用 "^$line" 来获得正确答案。我想
我有一个我无法解决的 numpy 问题。我有填充 0 和 1 的 3D 数组 (x,y,z)。例如,z 轴上的一个切片: array([[1, 0, 1, 0, 1, 1, 0, 0],
作为临时方法,我使用 .txt 文件来存储程序的某些变量。写入与 fs.appendFile 完美配合,但考虑到它的大小,使用 fs.readFile 读取不合适 - 我想得到某一行 来自文件,以及
我试图找到一种通过R studio进行调试的方法,但是我发现的所有解决方案都无法真正起作用。 1.)CTRL + enter:有效,但不会通过循环的每次迭代,而只能执行一次。 2.)添加“browse
在我的应用程序中,我的 EditText 左侧有行号 - 到目前为止一切都很好,行号与 EditText 的行完全对齐。 问题是,如果用户更改 EditText 的文本大小,则行号无法正确对齐。所以我
通过使用 + 的参数调用它,我可以使 vim 将光标定位在文件的最后一行。 : vi + myfile # "+" = go to last line of file 我怎样才能做到
我已经在文件中写入了这样的数据(某种) {:a 25 :b 28} {:a 2 :b 50} ... 我想要这些 map 的惰性序列。 大约有 4000 万行。我也可以写 10000 的 block
我在文本区域中发现了一个奇怪的错误(?)... 比如说,有一个 使用多行文本(用户粘贴的文本或预设文本无关紧要,两者都经过测试)。 我想从 中获取文本并替换 \n与其他东西......结果是,.re
我需要一个新行,这样我就可以在 PFD 中看到一个格式,我尝试添加一个页面宽度但它没有用,我用另一个东西/n 也没有用。这是我的代码。我可以手动添加格式,因为我需要显示从数据库中获取的信息,并且我在一
我正在尝试编写一个 Java 程序,它将大量 GPS 坐标捕捉到线形文件(道路网络),并且不仅返回新坐标,还返回捕捉到的线段的唯一标识符。该标识符是否是 FID、其他语言中使用的“索引”(即,其中 1
你好,我正在努力处理 JavaScript/NodeJS 中的数组。 基本上,这是我的代码: let arr = new Array(); arr = { "Username" : var1,
我正在学习 matplotlib 的基本教程,我正在处理的示例代码是: import numpy as np import matplotlib.pylab as plt x=[1,2,3,4] y=
所以,假设我有一个包含 20 行的文本文件,每行都有不同的文本。我希望能够有一个包含第一行的字符串,但是当我执行 NextLine(); 时我希望它成为下一行。我试过了,但它似乎不起作用: strin
我是一名优秀的程序员,十分优秀!