除了完全数字内容外,如何删除括号中的所有内容?

时间:2011-08-03 09:21:20

标签: javascript regex regex-negation

我想取一个字符串并删除方括号内所有出现的字符:

应删除

[foo][foo123bar][123bar]

但我想完整保留任何仅由数字组成的括号:

[1][123]应保留

我尝试了几件事但无济于事:

text = text.replace(/\[^[0-9+]\]/gi, "");

text = text.replace(/\[^[\d]\]/gi, "");

3 个答案:

答案 0 :(得分:2)

你可能需要这个:

text = text.replace(/\[[^\]]*[^0-9\]][^\]]*\]/gi, "");

说明:您希望将这些序列保留在包含数字的括号内。另一种说法是删除那些1)括在括号内的序列,2)不包含右括号,3)包含至少一个非数字字符。上面的正则表达式匹配一个左括号(\[),后跟除了右括号([^\]]之外的任意字符序列,注意必须转义结束括号),然后是非数字字符(也不包括结束括号),然后是除了右括号之外的任意字符序列,然后是结束括号。

答案 1 :(得分:2)

您正在寻找的工具是negative lookahead。以下是您将如何使用它:

text = text.replace(/\[(?!\d+\])[^\[\]]+\]/g, "");

\[找到一个左括号后,前瞻(?!\d+\])断言括号不仅包含数字。

然后,[^\[\]]+匹配任何不是方括号的内容,确保(例如)您不会意外地匹配“嵌套”括号,例如[[123]]

最后,\]与结束括号匹配。

答案 2 :(得分:0)

在python中:

import re
text = '[foo] [foo123bar] [123bar] [foo123] [1] [123]'
print re.sub('(\[.*[^0-9]+\])|(\[[^0-9][^\]]*\])', '', text)