2

私は現在、奇妙なjavascript正規表現の問題と戦っています。/入力の間または入力の終わりのすべての文字を一致させようとしています。たとえば、この文字列

admin/item/get

次のように一致させる必要があります。

[ 'admin', 'item', 'get' ]

/が試合の一部であるかどうかは本当に気にしないので、この結果は私にも役立ちます:

[ 'admin/', 'item/', 'get' ]

入力文字列を一致させるためにs、正規表現を使用しています

s.match(/.+?[\/$]/g)

その結果、

[ 'admin/', 'item/' ]

私の理解では、入力の終わりは$この文字セットでは一致しません。

正規表現を使用して入力の終わりのみを一致させようとするとs.match(/.+?$/g)、期待どおりの結果が得られ[ 'admin/item/get' ]ます。ただし、$を文字セットに入れるとs.match(/.+?$/g)、match呼び出しは。を返しますnull

助けていただければ幸いです...

ところで:私はnode.js0.8.20を使用しています

4

3 に答える 3

4

$は、文字セット内に配置されると文字として扱われるためです。ただし、これはそれを行う必要がありますが、非メモリキャプチャグループ内で代替を使用するため、$主題の終わりであるという意味を復元します。

s.match(/.+?(?:\/|$)/g)

["admin/", "bla/", "bla"]

コメントで述べたように:

s.split('/')

["admin", "bla", "bla"]
于 2013-02-20T08:08:37.240 に答える
1

$文字クラス内[]には特別な意味はなく、リテラル文字として扱われます

そのはず

.*?(?=\/|$)

代わりにこれを行うことができます../またはをチェックする必要はありません$

[^/]*
于 2013-02-20T08:08:43.323 に答える
0

文字列オブジェクトの正規表現または分割メソッドを使用して結果を得ることができます。

var s = "admin/item/get";

文字列オブジェクトの分割メソッドを使用します。

文字列を で分割します"/"

s.split("/");

["admin", "item", "get"]

正規表現パターンの使用。

文字列を正規表現/[^\/]+/gと照合します。これは、文字を除く 1 回以上出現するすべての文字に一致します"/"

s.match(/[^\/]+/g)

["admin", "item", "get"]
于 2013-02-20T09:43:36.813 に答える