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