非贪婪的正则表达式误解,/ \ /.*?$ /就像贪婪

时间:2019-04-20 15:08:24

标签: javascript regex regex-greedy

我正在使用javascript

/\/.*?$/.exec('foo/bar/tar')[0]

我原本希望得到/tar,但得到/bar/tar。据我了解,非贪婪的正则表达式将是最小的匹配。

我正在用myvar.split('/').reverse()[0]来规避这个问题,但是我不明白正则表达式的问题所在。

1 个答案:

答案 0 :(得分:2)

正则表达式没有什么问题,但是模式\/.*?$从第一个正斜杠匹配到字符串non greedy的末尾都匹配。

该点匹配换行符以外的任何字符,并且不考虑正斜杠,因此将导致/bar/tar

如果要匹配/tar,可以匹配正斜杠,然后再使用negated character class不再匹配正斜杠,然后声明字符串的结尾。

\/[^\/]+$

Pattern demo

console.log(/\/[^\/]+$/.exec('foo/bar/tar')[0]);