Javascript正则表达式替换方括号之间的最后一位数?

时间:2013-02-15 16:22:02

标签: javascript regex

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

我有一个这样的字符串:

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支持这一点,我仍然没有得到。

2 个答案:

答案 0 :(得分:4)

只需使用否定前瞻来确定在匹配后不再有括号:

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

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

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

答案 1 :(得分:0)

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

如果您提供的线路无法正常工作,我想是因为您还没有逃过方括号。它应该是:

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

你也可以进行一些捕捉以使眼睛更容易。

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