2011-08-03 131 views
0

我想有一個字符串,並刪除方括號內的字符的所有出現:如何刪除括號中除完全數字內容以外的所有內容?

[foo][foo123bar][123bar]應該被刪除

但我想保持完好只由數字組成括號:

[1][123]應保持

我試了幾件事情,但無濟於事:

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

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

請同時添加您正在使用的語言的標籤。 –

+0

不工作? 'text.replace(/ \ [^ [0-9] + \]/gi,「」);'改變'+'的位置。對不起,它不會,它只會替換字符,如果[]' – rubish

回答

2

你要找的工具是negative lookahead。這裏是你將如何使用它:

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

\[後定位的開口支架,超前,(?!\d+\])斷言,支架不僅包含數字。

然後,[^\[\]]+匹配任何不是方括號的內容,確保(例如)您不會意外地匹配「嵌套」括號,如[[123]]

最後,\]匹配右括號。

+0

謝謝 - 這是非常有幫助的。我知道\ d應該介入某個地方。這是它的行動:http://jsfiddle.net/QL4UL/ – annie

+0

偉大的,從來沒有聽說過負面的前瞻。這就是我喜歡SO的原因。 –

2

你可能需要這樣:

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

說明:您希望保留包含只有數字括號內的序列。另一種說法是刪除那些1)括在括號內的序列,2)不包含右括號,3)至少包含一個非數字字符。上面的正則表達式匹配前面的括號(\[),後面是除了結尾括號([^\]],注意結尾括號必須被轉義)之外的任意字符序列,然後是非數字字符(不包括右括號),然後是除右括號之外的任意字符序列,然後是右括號。

+0

中沒有數字字符感謝您的解釋! – annie

0

在蟒蛇:

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