在 replace() 中使用正则表达式来连接文本中的拆分词

Use of regex in replace() to join split words in a text

我在纯文本文件 (utf-8) 中有这个例句:

today is an interest-
ing day

第一行的“-”后面只有\n(我已经从文件中剥离了所有\r,以处理不同来源的统一) 我想将 2 行换成 1 行,因为“-”,这意味着前面的单词已被截断并在下一行继续。 要加入这种行,我尝试过的是:

text.replace(/[\n-]/g, "") 

但似乎没有用。实现这一目标的正确方法是什么?

我希望能够处理这两种可能的结局(或您可能预料到的类似情况):

interest-\n
interest- \n    (possible blanks inserted before \n)

您可以使用

text.replace(/\b-\s*\n\b/g, "")
text.replace(/\b-[^\S\r\n]*\n\b/g, "")

regex demo详情:

  • \b - 单词边界
  • - - 一个连字符
  • \s* - 零个或多个空格/[^\S\r\n]* - 零个或多个水平空格(支持 CRLF、CR 和 LF 结尾)
  • \n - 换行符
  • \b - 单词边界。

查看 JavaScript 演示:

console.log( "today is an interest- \ning day".replace(/\b-\s*\n\b/g, "") );
console.log( "today is an interest-\ning day".replace(/\b-\s*\n\b/g, "") );

一个只检查两端字母的 Unicode 感知模式看起来像 text.replace(/(?<=\p{L}\p{M}*)-[^\S\r\n]*\n(?=\p{L})/gu, ""),其中 (?<=\p{L}\p{M}*) 检查字母 + 在 - 和 [=21 之前的可选变音符号=] 检查换行符后的字母。见 regex demo.

您的正则表达式中存在三处错误:

  1. 您在 -

    之前有新行
  2. []表示匹配至少其中一个字符的列表

  3. 您需要添加\s来匹配空格

所以试试这个:

text.replace(/-\s*\n/g, "")