在 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.
您的正则表达式中存在三处错误:
您在 -
之前有新行
[]表示匹配至少其中一个字符的列表
您需要添加\s来匹配空格
所以试试这个:
text.replace(/-\s*\n/g, "")
我在纯文本文件 (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.
您的正则表达式中存在三处错误:
您在 -
之前有新行[]表示匹配至少其中一个字符的列表
您需要添加\s来匹配空格
所以试试这个:
text.replace(/-\s*\n/g, "")