我想取一个字符串并删除方括号内所有出现的字符:
应删除 [foo]
,[foo123bar]
和[123bar]
但我想完整保留任何仅由数字组成的括号:
[1]
和[123]
应保留
我尝试了几件事但无济于事:
text = text.replace(/\[^[0-9+]\]/gi, "");
text = text.replace(/\[^[\d]\]/gi, "");
答案 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)