我写了一个函数,在每个句子的开头大写每个字母。我想将原来具有换行符的文本从文本区域输出到文本区域。输出文本应保留这些换行符。但是我的代码忽略了所有换行符。你能帮我吗?我的代码:
btnPara.addEventListener("click", (e) => {
e.preventDefault();
function paragraphMode(str) {
var splitPara = str
.split(/\r?\n/)
.join(" ")
.split(". ")
.map(
(sentence) => sentence.charAt(0).toUpperCase() + sentence.substring(1)
);
return splitPara.join(". ");
}
outputText.value = paragraphMode(inputText.value);
});
您不需要处理换行符,只需要查找在.
之后出现的所有第一个字符。例如,您可以使用/(^|\.)\s*(\w)/g
const process = s => s.replace(/(^|\.)\s*(\w)/g,w=>w.toUpperCase())
console.log(process("abc. def . g h . ijk lm. \n O \n pq\nR\ns"))
console.log(process("some text is\nwritten here. it doens't\nproperly capitalize sentences.\ncan we fix it?")) // example sentence suggested by @ Scott Sauyet
btw,为获得与原始代码相同的效果(句点后只有一个空格/换行符,只需将\s*
更改为\r?[\n ]
const input = "abc. def . g h . ijk lm. \n O \n pq\nR"
const result = input.replace(/(^|\.)(\r?\n| )(\w)/g,w=>w.toUpperCase())
console.log(result)