寻找具有接受字符串并移除结尾'[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\]$/, '');
\[\d+\]$
应该说任何括号后面跟着任意数字的数字后面跟着一个括号,全部在字符串的末尾。
我说“应该”,因为我仍然不像我想要的那样熟练使用正则表达式,但是在regexr(用于测试正则表达式的一个漂亮的小AIR应用程序)中,它似乎工作正常。
编辑:
以防万一有人想玩弄regexr,它在http://gskinner.com/RegExr/desktop/。我与它没有任何关系,我只是认为这是一个很好的工具。
如果可以保证该字符串总是包含一个[number]
,你可以只使用substring
和lastIndexOf
:
str = str.substring(0, str.lastIndexOf('['));
更新:或者只是添加测试:
var index = str.lastIndexOf('[');
if(index > -1) {
str = str.substring(0,index);
}
+1 - 整个解决问题,使用正则表达式,有两个问题的东西... – orangepips 2010-12-19 01:16:37
\[\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)/
应该这样做,你将需要使用匹配的方法做它,它会提供两个组的数组,一个包含你需要的字符串,另一个包含它的结尾。
JavaScript不支持'\ A'和'\ Z'。改用'\ b'。 – 2010-12-19 01:18:17
完美!谢谢! – 2010-12-19 01:11:42
@Kelly - *原因*它不起作用(除了额外的反斜杠)是另外一组方括号将你的模式变成一个字符集(没有量词),使它匹配任何一个[, \,],\ d,+显示为输入字符串中的最后一个字符。 – 2010-12-19 01:13:39
感谢解释bemace。正则表达式融化我的大脑;) – 2010-12-19 22:31:25