JavaScript换行检测和换行保存

问题描述 投票:1回答:1

我写了一个函数,在每个句子的开头大写每个字母。我想将原来具有换行符的文本从文本区域输出到文本区域。输出文本应保留这些换行符。但是我的代码忽略了所有换行符。你能帮我吗?我的代码:

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);
});
javascript line-breaks capitalize
1个回答
1
投票

您不需要处理换行符,只需要查找在.之后出现的所有第一个字符。例如,您可以使用/(^|\.)\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)
© www.soinside.com 2019 - 2024. All rights reserved.