尋找具有接受字符串並移除結尾'[x]'的遞歸函數。例如'abc [1] [3]'需要是'abc [1]'。字符串也可以是'abc [1] [5] [2]',並且需要'abc [1] [5]'。如何使用正則表達式從字符串尾部刪除括號
我在嘗試str.replace(/[\\\[\d\\\]]$/, '')
,但它只取代最後一個右括號並忽略其他所有內容。
任何想法?
尋找具有接受字符串並移除結尾'[x]'的遞歸函數。例如'abc [1] [3]'需要是'abc [1]'。字符串也可以是'abc [1] [5] [2]',並且需要'abc [1] [5]'。如何使用正則表達式從字符串尾部刪除括號
我在嘗試str.replace(/[\\\[\d\\\]]$/, '')
,但它只取代最後一個右括號並忽略其他所有內容。
任何想法?
您不需要外圍括號。嘗試:str.replace(/\[\d\]$/, '');
\[\d+\]$
應該說任何括號後面跟着任意數字的數字後面跟着一個括號,全部在字符串的末尾。
我說「應該」,因爲我仍然不像我想要的那樣熟練使用正則表達式,但是在regexr(用於測試正則表達式的一個漂亮的小AIR應用程序)中,它似乎工作正常。
編輯:
以防萬一有人想玩弄regexr,它在http://gskinner.com/RegExr/desktop/。我與它沒有任何關係,我只是認爲這是一個很好的工具。
如果可以保證該字符串總是包含一個[number]
,你可以只使用substring
和lastIndexOf
:
str = str.substring(0, str.lastIndexOf('['));
更新:或者只是添加測試:
var index = str.lastIndexOf('[');
if(index > -1) {
str = str.substring(0,index);
}
+1 - 整個解決問題,使用正則表達式,有兩個問題的東西... – orangepips 2010-12-19 01:16:37
\[\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)/
應該這樣做,你將需要使用匹配的方法做它,它會提供兩個組的數組,一個包含你需要的字符串,另一個包含它的結尾。
JavaScript不支持'\ A'和'\ Z'。改用'\ b'。 – 2010-12-19 01:18:17
完美!謝謝! – 2010-12-19 01:11:42
@Kelly - *原因*它不起作用(除了額外的反斜槓)是另外一組方括號將你的模式變成一個字符集(沒有量詞),使它匹配任何一個[, \,],\ d,+顯示爲輸入字符串中的最後一個字符。 – 2010-12-19 01:13:39
感謝解釋bemace。正則表達式融化我的大腦;) – 2010-12-19 22:31:25