开宗明义

在开发小米手环JS游戏的时候,我需要做读取path的string,并把“level”后数字自增1的操作。
正则表达式就是匹配这样数字的法宝。
用JS实现的方式是用string.replace(regex, function) 方法。

实现

  1. 用到了=> 箭头函数,前面括号内的是形参,大括号里的是函数体。
  2. string.padStart(targetLength [, padString])是根据传入string长度,不够左边补0达到长度。
const path = 'pages/levels/level01'

const nextPath = path.replace(/level(\d+)$/, (match, p1) => {
  console.log(match) // "level01"
  console.log(p1)    // "01"
  
  const nextLevelNum = parseInt(p1, 10) + 1  // 1 + 1 = 2
  return `level${String(nextLevelNum).padStart(2, '0')}`  // "level02"
})

console.log(nextPath) // "pages/levels/level02"

如果不使用正则

麻烦很多。

const path = 'pages/levels/level01'

// 方法1:字符串操作
const lastSlashIndex = path.lastIndexOf('/')
const prefix = path.substring(0, lastSlashIndex + 1)  // 'pages/levels/'
const levelPart = path.substring(lastSlashIndex + 1)  // 'level01'
const num = parseInt(levelPart.replace('level', ''), 10)
const nextPath = prefix + 'level' + String(num + 1).padStart(2, '0')

// 方法2:分割数组
const parts = path.split('/')
const lastPart = parts[parts.length - 1]  // 'level01'
const num = parseInt(lastPart.slice(5), 10)  // 从第5位开始("level"长度)
parts[parts.length - 1] = 'level' + String(num + 1).padStart(2, '0')
const nextPath = parts.join('/')
posted on 2026-02-08 22:04  快乐的乙炔  阅读(7)  评论(0)    收藏  举报