2010-12-19 158 views
2

尋找具有接受字符串並移除結尾'[x]'的遞歸函數。例如'abc [1] [3]'需要是'abc [1]'。字符串也可以是'abc [1] [5] [2]',並且需要'abc [1] [5]'。如何使用正則表達式從字符串尾部刪除括號

我在嘗試str.replace(/[\\\[\d\\\]]$/, ''),但它只取代最後一個右括號並忽略其他所有內容。

任何想法?

回答

6

您不需要外圍括號。嘗試:str.replace(/\[\d\]$/, '');

+0

完美!謝謝! – 2010-12-19 01:11:42

+0

@Kelly - *原因*它不起作用(除了額外的反斜槓)是另外一組方括號將你的模式變成一個字符集(沒有量詞),使它匹配任何一個[, \,],\ d,+顯示爲輸入字符串中的最後一個字符。 – 2010-12-19 01:13:39

+0

感謝解釋bemace。正則表達式融化我的大腦;) – 2010-12-19 22:31:25

0
\[\d+\]$ 

應該說任何括號後面跟着任意數字的數字後面跟着一個括號,全部在字符串的末尾。

我說「應該」,因爲我仍然不像我想要的那樣熟練使用正則表達式,但是在regexr(用於測試正則表達式的一個漂亮的小AIR應用程序)中,它似乎工作正常。

編輯:

以防萬一有人想玩弄regexr,它在http://gskinner.com/RegExr/desktop/。我與它沒有任何關係,我只是認爲這是一個很好的工具。

2

如果可以保證該字符串總是包含一個[number],你可以只使用substringlastIndexOf

str = str.substring(0, str.lastIndexOf('[')); 

更新:或者只是添加測試:

var index = str.lastIndexOf('['); 
if(index > -1) { 
    str = str.substring(0,index); 
} 
+0

+1 - 整個解決問題,使用正則表達式,有兩個問題的東西... – orangepips 2010-12-19 01:16:37

0

\[\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 
0

/(.*)([\[].*[\]]\Z)/應該這樣做,你將需要使用匹配的方法做它,它會提供兩個組的數組,一個包含你需要的字符串,另一個包含它的結尾。

+0

JavaScript不支持'\ A'和'\ Z'。改用'\ b'。 – 2010-12-19 01:18:17

相關問題