我一直在寻找这个好几个小时,现在我以非常丑陋的方式结束了(但是工作)。我想找到一个可重用的好方法来做到这一点。
我有一个这样的字符串:
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支持这一点,我仍然没有得到。
答案 0 :(得分:4)
只需使用否定前瞻来确定在匹配后不再有括号:
var text = 'wanna[0].some[0].javascript';
text = text.replace(/\[\d](?!.*\[)/, '[1]');
答案 1 :(得分:0)
不确定为什么需要前瞻。你给出的答案(虽然丑陋)应该有效。正如Crockford在 JavaScript:好的部分中所说的负向前瞻:'这不是一个好的部分。'
如果您提供的线路无法正常工作,我想是因为您还没有逃过方括号。它应该是:
myString.replace(/\d\].javascript$/, "1].javascript");
你也可以进行一些捕捉以使眼睛更容易。
我同意你的问题的评论,这似乎是一个奇怪的问题需要解决。为什么要更改字符串中的数字?这看起来像是方括号中的数字变量可以更好地服务,然后你可以增加。