在字符串中将最后一个数字增加

5

给定以下字符串:

Backticks[0].Folders[0]

我需要增加后面的数字。

我不是正则表达式替换方面的专家,我尝试了这个,但它还选择了括号。

href = href.replace(/\d+]$/gi, matchedNumber++);

能否在一行中进行选择、增量和替换操作?


.将匹配除换行符以外的任何字符。转义它以匹配文字“.”,例如\. - user1106925
@squint,不,上面的正则表达式匹配的是0] - Shimmy Weitzhandler
1
@squint 你误解了,他想匹配字符串末尾前面的数字,但问题是他也将其包含在匹配中,因此它被替换掉了。 - Patashu
@Patashu:我只是在解释正则表达式中的“.”是什么意思。 - user1106925
2
@Squint 你是对的,但他知道 . 的作用,因为他正确地使用了它。 - Patashu
显示剩余4条评论
2个回答

5

可以在一行中完成

'Ace[0].Folders[0]'.replace(/\d+(?=]$)/, function(i) { return parseInt(i) + 1; })

哇,你可以像那样将函数传递给正则表达式,真是太疯狂了!酷! - Patashu
我可以在你的代码行前面放置 var i = 0 来重置计数器吗? - Shimmy Weitzhandler
@Shimmy:重置为什么?你理解replace及其回调函数的工作原理吗? - zerkms
所以我理解得没错。谢谢!这个回答棒极了。它向我揭示了一个我不知道存在的有趣方面。所以这是因为“replace”函数有一个期望一个委托的重载吗? - Shimmy Weitzhandler
@Shimmy:实际上这不是重载——它是接受多个可选参数的相同实现,因为在js中没有函数重载。 - zerkms
显示剩余2条评论

1
使用正向先行断言:
/\d(?=]$)/gi

这将确保数字后面有任何字符,而不包括它在替换中。
如果您想要递增它,可以使用matchparseInt
var href = this.href;
var re = /\d(?=.$)/gi
href = href.replace(re, parseInt(href.match(re))+1);

Here is a page where you can learn more about programming. Please polish the content to make it easier to understand. Do not provide explanations and keep the HTML tags.

这里有一个页面,你可以了解更多关于编程的内容。

这里是一个示例。


1
@Patashu 谢谢,我正要编辑的时候就看到它说:“编辑已完成!”:P - tckmn
@Doorknob,现在关于增量,我该怎么做?我能用正则表达式吗? - Shimmy Weitzhandler
1
@Shimmy,使用正则表达式实现此功能的可能性非常小。这不是正则表达式设计的初衷。捕获该数字,将其加一并重构字符串。 - Patashu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接