使用Regex选择网址的特定部分

时间:2015-03-31 05:31:12

标签: javascript regex

假设我有一个类似/dir/name.json的网址,我想选择并返回介于/dir/.json之间的任何内容,在本例中为name。所以我想出了类似的东西:

> var url = "/dir/name.json";
> var pattern = /\/\w+\./
> url.match(pattern) 
[ '/name.', index: 4, input: '/dir/name.json' ]

但我只想匹配name而不是/name.

当然,还有另一种方法可以使用substr

> var url = "/dir/name.json";
> url.substr(5, url.length-10)
'name'

但我想知道我是否可以使用Regex

来做到这一点

2 个答案:

答案 0 :(得分:2)

假设点是判别式(因此它不能出现在dir名称中......)

x = (/\w+(?=\.)/).exec("/dir/name.json")

可以做到。

语法(?=...)描述了一个必须匹配但不被考虑的子表达式#34;消耗字符"所以整个正则表达式的含义是"一个非空的单词字符序列,后跟一个点(不考虑它是匹配的一部分)"。

技术名称为"正面超前零宽度断言"。

如果点可能出现在目录名称中,可以使用的是:

x = (/\w+(?=\.\w*$)/).exec("/dir.1/dir.2/name.json")

因为前瞻现在想要确保在点之后只有单词字符(如果有的话),然后字符串结束。

最后,如果扩展名可能完全丢失:

x = (/\w+(?=\.\w*$|$)/).exec("/dir.1/dir.2/name.json")

也适用于"dir.1/dir.2/name"

答案 1 :(得分:2)

试试这个:

alert("/dir/name.json".match(/\/(\w+)\./)[1])

alert("/dir/name.json".split("/").pop().split(".").shift())