假设我有一个类似/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
来做到这一点答案 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())