非贪婪正则表达式误解,/\/.*?$/ 表现得像贪婪
Non-greed regex misunderstanding, /\/.*?$/ act like greed
我正在 javascript
尝试这个
/\/.*?$/.exec('foo/bar/tar')[0]
我原本希望得到 /tar
结果却得到了 /bar/tar
。据我了解,非贪婪正则表达式将采用最小匹配。
我用 myvar.split('/').reverse()[0]
规避了这个问题,但我不明白正则表达式出了什么问题。
正则表达式没有问题,但模式 \/.*?$
匹配从第一个正斜杠到字符串结尾的非贪婪模式。
点匹配除换行符以外的任何字符,并且不考虑正斜杠,因此将导致 /bar/tar
.
如果你想匹配 /tar
,你可以匹配正斜杠,然后使用 negated character class 不再匹配正斜杠,然后断言字符串的结尾。
\/[^\/]+$
console.log(/\/[^\/]+$/.exec('foo/bar/tar')[0]);
我正在 javascript
尝试这个/\/.*?$/.exec('foo/bar/tar')[0]
我原本希望得到 /tar
结果却得到了 /bar/tar
。据我了解,非贪婪正则表达式将采用最小匹配。
我用 myvar.split('/').reverse()[0]
规避了这个问题,但我不明白正则表达式出了什么问题。
正则表达式没有问题,但模式 \/.*?$
匹配从第一个正斜杠到字符串结尾的非贪婪模式。
点匹配除换行符以外的任何字符,并且不考虑正斜杠,因此将导致 /bar/tar
.
如果你想匹配 /tar
,你可以匹配正斜杠,然后使用 negated character class 不再匹配正斜杠,然后断言字符串的结尾。
\/[^\/]+$
console.log(/\/[^\/]+$/.exec('foo/bar/tar')[0]);