You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式结合replaceAll格式化JavaScript字符串?棋谱符号格式化及代码简化方案问询

一行JavaScript代码完成棋谱字符串的清理与格式调整

需求回顾

原始棋谱字符串:

1. \td11-d9 \te7-e10 \n2. \ta8-c8 \tg7-g10xf10 \n3. \th11-h9 \tf7-i7

需要完成的操作:

  1. 清理所有制表符、换行符和多余空格,将多个空白字符合并为单个空格
  2. 移除回合数(如1.)后的空格(你之前用了.replaceAll('. ', '.')的操作)
  3. 在每个回合数(1.、2.、3.)前添加3个空格,最终得到目标格式:
1.d11-d9 e7-e10   2.a8-c8 g7-g10xf10   3.h11-h9 f7-i7

一行解决方案代码

const formattedChessNotation = originalStr.replace(/[\t\n\s]+/g, ' ').replace(/\. /g, '.').replace(/(^|\s)(\d+\.)/g, '$1   $2');

代码细节解释

  1. 第一个replace(/[\t\n\s]+/g, ' '):匹配所有制表符(\t)、换行符(\n)和连续空格,统一替换为单个空格,一步完成空白字符的清理。
  2. 第二个replace(/\. /g, '.'):精准移除回合数后面的空格(比如把1. 变成1.),和你之前的.replaceAll('. ', '.')效果完全一致。
  3. 第三个replace(/(^|\s)(\d+\.)/g, '$1 $2'):匹配两种场景的回合数——字符串开头的数字.,或者前面带有空格的数字.,将其替换为「原前缀(开头为空/中间为空格) + 3个空格 + 回合数」,完美实现每个回合数前添加3个空格的需求。

如果追求极致精简,还可以把前两个替换操作合并成一个:

const formattedChessNotation = originalStr.replace(/([\t\n\s]+)|(\. )/g, (_, p1, p2) => p1 ? ' ' : '.').replace(/(^|\s)(\d+\.)/g, '$1   $2');

这个版本用一个正则同时匹配空白字符和. ,通过回调函数判断匹配类型,分别替换为单个空格或者.,一步完成清理和移除回合数后空格的操作。

内容的提问来源于stack exchange,提问作者Plamen Draganov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:19:07