文字列を受け取り、末尾の「[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\]$/, '');
文字列に常にが含まれることが保証されている場合は、andを[number]
使用できます。substring
lastIndexOf
str = str.substring(0, str.lastIndexOf('['));
更新:または単にテストを追加します:
var index = str.lastIndexOf('[');
if(index > -1) {
str = str.substring(0,index);
}
\[\d+\]$
つまり、すべて文字列の最後に、任意のブラケット、任意の桁数、その後にブラケットが続く必要があります。
私はまだregexに精通していないので「すべき」と言いますが、regexr(正規表現をテストするための気の利いた小さなAIRアプリ)では機能するようです。
編集:
誰かが正規表現をいじりたい場合に備えて、http://gskinner.com/RegExr/desktop/にあります。私はそれとは何の関係もありません、私はそれが持っている素晴らしいツールだと思います。
\[\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)/
実行する必要がある場合は、matchメソッドを使用して実行する必要があります。これにより、配列内に2つのグループが提供されます。1つは必要な文字列で、もう1つは末尾が終了します。