test-remark-replace.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // 测试 {remark} 替换问题
  2. console.log('=== 测试 {remark} 替换问题 ===\n');
  3. // 模拟打印模板
  4. const template1 = `订单号: {orderNo}
  5. 时间: {orderTime}
  6. 商品: {goodsList}
  7. 合计: {payAmount}
  8. 备注: {remark}
  9. 收货人姓名: {receiverName}
  10. 地址: {address}
  11. 联系电话: {receiverPhone}`;
  12. const template2 = `订单号: {orderNo}
  13. 时间: {orderTime}
  14. 商品: {goodsList}
  15. 合计: {payAmount}
  16. 备注: { remark } // 有空格
  17. 收货人姓名: {receiverName}
  18. 地址: {address}
  19. 联系电话: {receiverPhone}`;
  20. const template3 = `订单号: {orderNo}
  21. 时间: {orderTime}
  22. 商品: {goodsList}
  23. 合计: {payAmount}
  24. 备注: {{remark}} // 双大括号
  25. 收货人姓名: {receiverName}
  26. 地址: {address}
  27. 联系电话: {receiverPhone}`;
  28. // 模拟变量
  29. const variables = {
  30. orderNo: 'ORD20251210112844577127',
  31. orderTime: '2025-12-10 19:28:44',
  32. goodsList: '洗护产品6 × 1 = ¥0.01',
  33. payAmount: '¥0.01',
  34. remark: '测试备注内容',
  35. receiverName: '1',
  36. address: '1',
  37. receiverPhone: '13100000000'
  38. };
  39. // 测试不同的替换方法
  40. function testReplaceMethod(name, template, variables) {
  41. console.log(`\n=== 测试方法: ${name} ===`);
  42. console.log('原始模板:');
  43. console.log(template);
  44. let content = template;
  45. // 方法1: 当前代码中的方法
  46. if (name === '当前代码方法') {
  47. for (const [key, value] of Object.entries(variables)) {
  48. const placeholder = `{${key}}`;
  49. if (content.includes(placeholder)) {
  50. content = content.split(placeholder).join(value);
  51. }
  52. }
  53. }
  54. // 方法2: 正则表达式替换
  55. if (name === '正则表达式方法') {
  56. for (const [key, value] of Object.entries(variables)) {
  57. const regex = new RegExp(`\\{${key}\\}`, 'g');
  58. content = content.replace(regex, value);
  59. }
  60. }
  61. // 方法3: 处理有空格的情况
  62. if (name === '处理空格方法') {
  63. for (const [key, value] of Object.entries(variables)) {
  64. // 处理 {key} 和 { key } 两种情况
  65. const regex1 = new RegExp(`\\{${key}\\}`, 'g');
  66. const regex2 = new RegExp(`\\{\\s*${key}\\s*\\}`, 'g');
  67. content = content.replace(regex1, value).replace(regex2, value);
  68. }
  69. }
  70. console.log('\n替换后内容:');
  71. console.log(content);
  72. // 检查是否还有未替换的 {remark}
  73. if (content.includes('{remark}') || content.includes('{ remark }') || content.includes('{{remark}}')) {
  74. console.log('❌ 仍有未替换的 remark 占位符');
  75. } else {
  76. console.log('✅ 所有 remark 占位符已替换');
  77. }
  78. }
  79. // 运行测试
  80. testReplaceMethod('当前代码方法', template1, variables);
  81. testReplaceMethod('正则表达式方法', template2, variables);
  82. testReplaceMethod('处理空格方法', template3, variables);
  83. // 测试空备注情况
  84. console.log('\n\n=== 测试空备注情况 ===');
  85. const emptyRemarkVariables = {
  86. ...variables,
  87. remark: null
  88. };
  89. const emptyRemarkVariables2 = {
  90. ...variables,
  91. remark: ''
  92. };
  93. console.log('1. remark = null:');
  94. let content1 = template1;
  95. for (const [key, value] of Object.entries(emptyRemarkVariables)) {
  96. const placeholder = `{${key}}`;
  97. if (content1.includes(placeholder)) {
  98. const replaceValue = value || '无备注';
  99. content1 = content1.split(placeholder).join(replaceValue);
  100. }
  101. }
  102. console.log(content1);
  103. console.log('\n2. remark = "":');
  104. let content2 = template1;
  105. for (const [key, value] of Object.entries(emptyRemarkVariables2)) {
  106. const placeholder = `{${key}}`;
  107. if (content2.includes(placeholder)) {
  108. const replaceValue = value || '无备注';
  109. content2 = content2.split(placeholder).join(replaceValue);
  110. }
  111. }
  112. console.log(content2);