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)null

任何帮助表示赞赏...

顺便说一句:我正在使用 node.js 0.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,它匹配除字符外所有出现一次或多次的"/"字符。

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

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