繁体   English   中英

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

[英]How to remove a number inside brackets at the end of string with regex

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

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

有任何想法吗?

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

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

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)/应该这样做,你需要使用匹配方法,它将在一个数组中提供两个组,一个具有您需要的字符串,另一个以其结尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM