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