【问题标题】:Replace the first repeated instance of a character [duplicate]替换字符的第一个重复实例[重复]
【发布时间】:2025-12-19 16:45:17
【问题描述】:

所以我有一个我似乎无法找到答案的简单问题。我有:

let a = '1111Some1text1or1something'

我正在努力实现:

'2222Some1text1or1something'

为了清楚起见,我将字符设置为数字,实际上我是在尝试替换空格。无论如何请注意,它仅在开头替换单个字符的每个实例。当它到达\w时它将停止替换

几乎所有的谷歌搜索都让我找到了关于“减少重复字符”等的答案,但我希望“替换一个字符的所有实例,直到第一个单词”

a.replace(/^[1]*/, '2')

将所有重复的字符压缩成一个。

【问题讨论】:

  • a.replace(/1/gy, '2')。使用 ECMAScript 2018+ JS 环境,您甚至可以使用 a.replace(/(?<=^1*)1/g, '2')
  • 试试这个:(.)\1+ 匹配第一个 (\1) 捕获组中最近匹配的相同文本。
  • 感谢@WiktorStribiżew,我很想使用那个,但“粘性”不兼容 IE11。无论如何,我都会给你信用,因为 IE11 是垃圾。不幸的是,我在 IE11 领域,所以不要这样做。
  • @lux 似乎将所有内容替换为单个“查找”。所以这会粉碎重复的模式。然而,这是一件很酷的事情,只是在我的情况下不起作用。

标签: javascript regex


【解决方案1】:

给猫剥皮的方法不止一种。这是一个带有替换功能的例子,其中p1 包含 1,并被替换为 2:

var str = '1111Some1text1or1something'
var result = str.replace(/^(1*)/, function(m, p1) {
  return p1.replace(/1/g, '2')
});
console.log('result: ' + result);

控制台日志:

result: 2222Some1text1or1something

【讨论】:

【解决方案2】:

您可以将函数指定为replace 的第二个参数,并使用匹配长度来生成具有适当长度的替换。

"1111Some1text1or1something".replace(/^[1]*/, (match) => '2'.repeat(match.length))

【讨论】:

    最近更新 更多