希望有一个递归函数,它接受一个字符串并删除结尾'[x]'。例如'abc [1] [3]'需要是'abc [1]'。该字符串也可以是'abc [1] [5] [2]',并且需要是'abc [1] [5]'。
我正在尝试str.replace(/[\\\[\d\\\]]$/, '')
,但它只会替换最后一个结束括号并忽略其他所有内容。
有什么想法吗?
答案 0 :(得分:6)
您不需要外部封闭支架。尝试:str.replace(/\[\d\]$/, '');
答案 1 :(得分:2)
如果确保字符串始终包含[number]
,则可以使用substring
和lastIndexOf
:
str = str.substring(0, str.lastIndexOf('['));
更新或者只是添加一个测试:
var index = str.lastIndexOf('[');
if(index > -1) {
str = str.substring(0,index);
}
答案 2 :(得分:0)
\[\d+\]$
应该说任何括号后跟任意数字后跟一个括号,都在字符串的末尾。
我说“应该”因为我仍然不像我想要的那样精通正则表达式,但是在regexr(一个用于测试正则表达式的漂亮小AIR应用程序)中,它似乎有效。
编辑:
如果有人想玩regexr,那就是http://gskinner.com/RegExr/desktop/。我与它没有任何关系,我认为这是一个很好的工具。
答案 3 :(得分:0)
\[\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
答案 4 :(得分:0)
/(.*)([\[].*[\]]\Z)/
应该这样做,你需要使用匹配方法来做,它将在一个数组中提供两个组,一个包含你需要的字符串,另一个包含结尾。