我正在尝试从文本区域的任何给定输入中“拉平”(删除换行符和段落换行符)。
假设输入为:
select * where {
?s ?p ?o .
} limit 100
预期结果为:
select * where { ?s ?p ?o . } limit 100
到目前为止,我已经使用以下代码设法删除了换行符:
val.replace(/$(\r|\n)(?=.)/gm, ' ');
目前给我的是什么
select * where { ?s ?p ?o . } limit 100
有什么想法吗?预先感谢!
答案 0 :(得分:2)
关于CRLF:
-按照@Unimportant的建议,将\s+
替换为空格。
原因是格式化结果无论如何都无法正常工作。
最好与均匀的分离保持一致。
关于段落的中断和中断:
-将</?p\s*>|<br\s*/>
替换为空。
因此,两个独立运行的正则表达式可以完成这项工作。
答案 1 :(得分:1)
在您的匹配条件中添加空格字符\s
,并添加一个*
表示可以同时进行多个匹配。从这里开始,您只想用空字符串而不是空格替换此类字符。
这可以在下面看到:
const val = `select * where {
?s ?p ?o .
} limit 100 `;
console.log(val.replace(/$(\r|\n|\s)*(?=.)/gm, ''));
答案 2 :(得分:1)
我建议
val = val.replace(/[^\S\r\n]*[\r\n]+\s*/g, ' ')
这会将带有相邻空白的换行符(包括任何连续的空白行)“缩小”到单个空格中。
在这里
[^\S\r\n]*
-匹配0+个水平空格[\r\n]+
-1个以上的CR或LF字符\s*
-任意0 + whitespce字符。请参见regex demo。