1

次のような文字列があります。

one[two][three][four]

最後のブラケットの内容をキャプチャしたいので、これを試しました:

/\[(.*)\]$/

ただし、次の結果が返されました。

two][three][four

最後の括弧の内容のみに一致するように正規表現を作成するにはどうすればよいですか?

4

6 に答える 6

5

[firstと last の間のすべてを読み取る貪欲な量指定子を使用しています]。以下の正規表現を使用できます。

/\[([^\]]*)\]$/  

万が一]、文字列の最後にない場合は、別の文字クラスを追加して、最後の文字以外の任意の文字に一致させることができ[ます]

/\[([^\]]*)\][^\[\]]*$/

しかし、正直なところ、 @ gdoronの回答のように、正規表現を使用するのではなく、文字列操作を使用してこの問題を解決する必要があります。

于 2013-07-11T15:57:49.573 に答える
3

実際、あなたの場合、正規表現さえ必要ありません:

var str = 'one[two][three][four]';
alert(str.substring(str.lastIndexOf('[') +1, str.lastIndexOf(']')));

[最後と最後の間の部分文字列を取得します]

于 2013-07-11T15:59:06.493 に答える
1

正規表現検索は左から右に開始されます..したがって、一致します..これは、two][three][four使用しても機能しません.*?

この正規表現を使用する必要があります

[^\[]+(?=\]$)

しかし、私はこれを好むだろう

var output=input.substring(input.lastIndexOf("[")+1,input.lastIndexOf("]"));
于 2013-07-11T15:58:21.403 に答える
1

私はテストしました

.*(\[.*\])RegexPlanetで、グループ 1 に [4] を与えました。

人々は貪欲について話しているが、 「さらに貪欲」であるような所有量指定子もあり、時には役立つかもしれないことに注意してください。.*+

PS: JTexy プロジェクトから正規表現の良い教訓を得ました。こちらを参照してください。Java ですが、PCRE を使用します。

于 2013-07-11T16:18:07.610 に答える
0

どう \[[^\[]*$ ですか?これは、後に他の '[' がない '[' に一致し、その後は何でも返します。

于 2013-07-11T16:01:05.127 に答える