【问题标题】:Increment last number in string增加字符串中的最后一个数字
【发布时间】:2013-05-09 00:55:32
【问题描述】:

给定以下字符串:

Backticks[0].Folders[0]

我需要增加后一个数字。

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

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

是否可以在一个衬垫中进行选择、增量和替换?

【问题讨论】:

  • . 将匹配除换行符以外的任何字符。转义它以匹配文字 .,例如 \.
  • @squint,不,上面的正则表达式匹配0]
  • @squint 你误会了,他想匹配字符串末尾之前的数字,但问题是他也将它包含在匹配中,因此它被替换为不存在。
  • @Patashu:我只是在解释 . 在正则表达式中的作用。
  • @Squint 你是对的,但他知道. 做了什么,他正确使用它的事实证明了这一点。

标签: javascript regex string


【解决方案1】:

可以一行完成

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

【讨论】:

  • 哇,你可以向正则表达式传递这样的函数真是太疯狂了!酷!
  • 我可以在你的行前加一个var i = 0 来重置计数器吗?
  • @Shimmy:把它重置成什么?你了解replace 及其回调的工作原理吗?
  • 现在我想我明白了,i 代表要替换的数字。
  • @Shimmy: 对,参数等于当前匹配数
【解决方案2】:

使用积极的前瞻:

/\d(?=]$)/gi

这将确保在数字之后的字符串结尾之后有任何字符,而不包括在替换中。

如果你想增加它,你可以使用matchparseInt

var href = this.href;
var re = /\d(?=.$)/gi
href = href.replace(re, parseInt(href.match(re))+1);

Here is a page 您可以在此了解更多信息。

Here is a fiddle.

【讨论】:

  • @Patashu 谢谢,当它说“进行了编辑!”时,我正要进行编辑。 :P
  • @Doorknob,现在到增量,我该怎么做?我可以用正则表达式吗?
  • @Shimmy 你不太可能用正则表达式来做到这一点。这不是正则表达式的设计目的。捕获数字,将其加一并重建字符串。
猜你喜欢
  • 2015-05-03
  • 2015-06-18
  • 2019-06-19
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多