Javascript 如何使用正则表达式删除字符串末尾括号内的数字

Javascript 如何使用正则表达式删除字符串末尾括号内的数字,javascript,regex,square-bracket,Javascript,Regex,Square Bracket,希望有一个递归函数,该函数接受字符串并删除结尾“[x]”。例如,“abc[1][3]”需要是“abc[1]”。字符串也可以是“abc[1][5][2]”,并且必须是“abc[1][5]” 我正在尝试str.replace(/[\\\[\d\\\]]$/,“”)但它只替换最后一个结束括号,而忽略了其他所有内容 有什么想法吗 \[\d+\]$ 也就是说,任何括号后面跟任意数字,后面跟一个括号,都在字符串的末尾 我之所以说“应该”,是因为我对regex的熟练程度还不如我所希望的那样高,但在regex

希望有一个递归函数,该函数接受字符串并删除结尾“[x]”。例如,“abc[1][3]”需要是“abc[1]”。字符串也可以是“abc[1][5][2]”,并且必须是“abc[1][5]”

我正在尝试
str.replace(/[\\\[\d\\\]]$/,“”)
但它只替换最后一个结束括号,而忽略了其他所有内容

有什么想法吗

\[\d+\]$
也就是说,任何括号后面跟任意数字,后面跟一个括号,都在字符串的末尾

我之所以说“应该”,是因为我对regex的熟练程度还不如我所希望的那样高,但在regexr(一个用于测试正则表达式的漂亮的小AIR应用程序)中,它似乎很管用

编辑:


万一有人想玩regexr,它就在。我与它没有任何关系,我只是认为它是一个很好的工具。

您不需要外部的封闭括号。Try:
str.replace(/\[\d\]$/,“”)

如果保证字符串始终包含一个
[number]
,您可以使用和:

更新:或只添加一个测试:

var index = str.lastIndexOf('[');
if(index > -1) {
    str = str.substring(0,index);
}
\[\d+\]([^]]*)$
在Python中工作,应该在Javascript中工作。这允许在
[x]
之后保留尾随位。我相信这就是为什么你没有看到预期的结果,因为你留下了后面的空白。还要注意,我修改了正则表达式,允许
x
为任意位数——如果您不希望这样,请删除
+

代码如下:

import re
s = 'abc [1] [5] [2]'
while True:
  new_s = re.sub(r'\[\d+\]([^]]*)$', r'\1', s)
  if new_s == s:
    break
  s = new_s
  print s
以及输出:

abc [1] [5] 
abc [1]  
abc   

/(.*)([\[].[\]]\Z)/
如果要这样做,您需要使用匹配方法,它将在一个数组中提供两个组,一个包含所需字符串,另一个包含结尾。

@Kelly-它不起作用的原因(除了额外的反斜杠)额外的方括号集正在将您的模式转换为字符集(不带量词),使其与输入字符串中最后一个字符[,\,],\d,+中的任何一个匹配。如果这对其他人有帮助:如果您希望使用多个数字(例如,“abc[1][24]),则需要在\d之后添加+号,类似于:
str.replace(/\[\d+\]$/,“”)JavaScript不支持
\A
\Z
。改用
\b
abc [1] [5] 
abc [1]  
abc