捕获有条件存在的群体

时间:2014-07-15 12:52:43

标签: javascript regex web

我有像

这样的网址
http://localhost:8080/web/group/555/content/777/image?arg1=1&arg2=2#anchor

我试图获得3个部分:组号内容编号视图类型值,即& #34;图像"在上面的示例中(可以是一组预定义的值,并且保证没有带有文本的值" group"或" content")。

到目前为止,我得到了以下regexp(它有3个我需要的捕获组)

/.*(?:\/group\/([\d]+))(?:\/content\/([\d]+))\/([\w]+).*/g

仅在所有部件都存在时才有效。

问题是任何部分都可能缺席("查看类型"除外),因此下一个网址也有效:

http://localhost:8080/web/content/777/image
// which has $1="", $2="777", $3="image"
http://localhost:8080/web/nogroup/555/content/777/video
// which has $1="", $2="777", $3="video"
http://localhost:8080/web/audio
// which has $1="", $2="", $3="audio"

有没有办法告诉regexp:如果组$ 1没有匹配,则将其值设置为""?

1 个答案:

答案 0 :(得分:0)

您需要在每个可以出现但不是匹配所必需的群组之后添加问号?,并且会自动使用""填充它们:

/.*(?:\/group\/([\d]+))?(?:\/content\/([\d]+))?\/([\w]+).*/g