2

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

我正在尝试str.replace(/[\\\[\d\\\]]$/, ''),但它只替换最后一个右括号并忽略其他所有内容。

有任何想法吗?

4

5 回答 5

7

您不需要外部括号。尝试:str.replace(/\[\d\]$/, '');

于 2010-12-19T01:05:18.680 回答
2

如果保证字符串始终包含 a [number],则可以只使用substringand lastIndexOf

str = str.substring(0, str.lastIndexOf('['));

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

var index = str.lastIndexOf('[');
if(index > -1) {
    str = str.substring(0,index);
}
于 2010-12-19T01:08:41.533 回答
0
\[\d+\]$

这应该说任何括号后跟任意数量的数字后跟一个括号,都在字符串的末尾。

我说“应该”是因为我仍然没有像我希望的那样精通正则表达式,但是在 regexr(一个用于测试正则表达式的漂亮的小 AIR 应用程序)中,它似乎可以工作。

编辑:

以防万一有人想玩 regexr,它位于http://gskinner.com/RegExr/desktop/。我与它没有任何关系,我只是认为它是一个不错的工具。

于 2010-12-19T01:04:33.750 回答
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   
于 2010-12-19T01:09:34.670 回答
0

/(.*)([\[].*[\]]\Z)/应该这样做,您将需要使用 match 方法来完成它,它将在一个数组中提供两个组,一个带有您所需的字符串,另一个带有结尾。

于 2010-12-19T01:11:05.773 回答