我正在使用javascript
/\/.*?$/.exec('foo/bar/tar')[0]
我原本希望得到/tar
,但得到/bar/tar
。据我了解,非贪婪的正则表达式将是最小的匹配。
我正在用myvar.split('/').reverse()[0]
来规避这个问题,但是我不明白正则表达式的问题所在。
答案 0 :(得分:2)
正则表达式没有什么问题,但是模式\/.*?$
从第一个正斜杠匹配到字符串non greedy的末尾都匹配。
该点匹配换行符以外的任何字符,并且不考虑正斜杠,因此将导致/bar/tar
。
如果要匹配/tar
,可以匹配正斜杠,然后再使用negated character class不再匹配正斜杠,然后声明字符串的结尾。
\/[^\/]+$
console.log(/\/[^\/]+$/.exec('foo/bar/tar')[0]);