正则表达式与$ in字符集不匹配

时间:2013-02-20 08:05:39

标签: javascript regex node.js

我正在与一个奇怪的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

3 个答案:

答案 0 :(得分:4)

因为$被放置在字符集中时被视为字符。这应该这样做,它使用非内存捕获组内的交替,从而恢复$作为主题结束的含义:

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

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

如评论中所述:

s.split('/')

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

答案 1 :(得分:1)

字符类$中的

[]没有特殊含义,被视为文字字符

应该是

.*?(?=\/|$)

你可以这样做..你不必检查/$

[^/]*

答案 2 :(得分:0)

您可以使用regex或split方法获得字符串对象的结果。

var s = "admin/item/get";

使用字符串对象的split方法。

"/"分割字符串。

s.split("/");

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

使用正则表达式。

将字符串与正则表达式/[^\/]+/g匹配,该表达式匹配除"/"个字符以外出现一次或多次的所有字符。

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

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