2

文字列を受け取り、末尾の「[x]」を削除する再帰関数を探しています。たとえば、「abc[1][3]」は「abc[1]」である必要があります。文字列は「abc[1][5] [2]」にすることもでき、「abc[1][5]」にする必要があります。

私は試しstr.replace(/[\\\[\d\\\]]$/, '')ていますが、最後の閉じ括弧を置き換えるだけで、他のすべてを無視します。

何か案は?

4

5 に答える 5

7

外側の囲みブラケットは必要ありません。試す:str.replace(/\[\d\]$/, '');

于 2010-12-19T01:05:18.680 に答える
2

文字列に常にが含まれることが保証されている場合は、andを[number]使用できます。substringlastIndexOf

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

更新:または単にテストを追加します:

var index = str.lastIndexOf('[');
if(index > -1) {
    str = str.substring(0,index);
}
于 2010-12-19T01:08:41.533 に答える
0
\[\d+\]$

つまり、すべて文字列の最後に、任意のブラケット、任意の桁数、その後にブラケットが続く必要があります。

私はまだregexに精通していないので「すべき」と言いますが、regexr(正規表現をテストするための気の利いた小さなAIRアプリ)では機能するようです。

編集:

誰かが正規表現をいじりたい場合に備えて、http://gskinner.com/RegExr/desktop/にあります。私はそれとは何の関係もありません、私はそれが持っている素晴らしいツールだと思います。

于 2010-12-19T01:04:33.750 に答える
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   
于 2010-12-19T01:09:34.670 に答える
0

/(.*)([\[].*[\]]\Z)/実行する必要がある場合は、matchメソッドを使用して実行する必要があります。これにより、配列内に2つのグループが提供されます。1つは必要な文字列で、もう1つは末尾が終了します。

于 2010-12-19T01:11:05.773 に答える