2

我一直在寻找这个几个小时,现在我以一种非常丑陋的方式结束(但工作)。我想找到一种可重复使用的好方法来做到这一点。

我有一个这样的字符串:

wanna[0].some[0].javascript

我想替换方括号之间的最后一位数字:

wanna[0].some[1].javascript

我已经结束了这种(丑陋的)方式:

myString.replace(/\d].javascript$/, "1].javascript")

哪个应该是与之匹配的最佳正则表达式?

myString.replace(/\d/, 1) // this should be for the first digit
myString.replace(/\d/g, 1) // this for every digit

我已经阅读了有关负前瞻的信息,但如果 JS 支持这一点,我仍然没有得到。

4

2 回答 2

4

只需使用负前瞻来确定在您匹配的括号之后没有更多的括号:

var text = 'wanna[0].some[0].javascript';

text = text.replace(/\[\d](?!.*\[)/, '[1]');

这是小提琴:http: //jsfiddle.net/bRkEP/

于 2013-02-15T16:24:48.237 回答
0

不知道为什么需要前瞻。你给出的答案(虽然丑陋)应该有效。正如 Crockford 所说的JavaScript 中的负前瞻:好的部分:“这不是一个好的部分。”

如果您提供的行不起作用,我想这是因为您没有逃脱方括号。它应该是:

myString.replace(/\d\].javascript$/, "1].javascript");

您还可以进行一些捕捉以使眼睛更容易。

我同意你的问题的评论,这似乎是一个奇怪的问题要解决。为什么要更改字符串中的数字?这看起来可以更好地在方括号中使用数字变量来提供,然后您可以增加该变量。

于 2013-02-15T16:30:20.663 回答