使用正则的先行断言和后行断言来排版你的文字

2023-12-18 14:44:36 浏览数 (2)

如我有以下一串字符:

代码语言:javascript复制
let str = '为中华nn只崛aaa起n而读书n     我是123中国1111人';

想要的效果

  • 每个换行之后自动缩进,等于添加四个空格
  • 所有数字和其它字符的间隔有空格
  • 所有字母和其它字符的间隔有空格
  • 重复排版不会导致排班错乱

代码如下:

代码语言:javascript复制
// 先行断言后面不会出现 4 个空格彩条混
const brReg = /n(?!s{4})/g;
// 后行断言前面没有空格和数字才替换, 后面的想通
const numPreReg = /(?<!s|d)(d )/g;
const numExtReg = /(d )(?!s|d)/g;
const charPreReg = /(?<!s|[a-zA-Z])([a-zA-Z] )/g;
const charExtReg = /([a-zA-Z] )(?!s|[a-zA-Z])/g;


str = str.replace(brReg, 'n    ');
str = str.replace(charPreReg, ' $1');
str = str.replace(charExtReg, '$1 ');
str = str.replace(numPreReg, ' $1');
str = str.replace(numExtReg, '$1 ');

// 为中华n    n    只崛 aaa 起n    而读书n     我是 123 中国 1111 人
console.log(JSON.stringify(str));

PS: 有梦记的自动格式化文本正式来源于此功能

0 人点赞