[英]match only the last instance of a pattern with Javascript regexp
我想從文件名中刪除大小數據
var src = 'http://az648995.vo.msecnd.net/win/2015/11/Halo-1024x551.jpg';
src = src.replace(
/-\d+x\d+(.\S+)$/,
function( match, contents, offset, s ) {
return contents;
}
);
這按預期工作,我得到
http://az648995.vo.msecnd.net/win/2015/11/Halo.jpg
但是,如果我有像這樣的文件名
http://az648995.vo.msecnd.net/win/2015/11/slot-Drake-08-2000x1000-1024x512.jpg
它返回
http://az648995.vo.msecnd.net/win/2015/11/slot-Drake-08-1024x512.jpg
而不是期望的
http://az648995.vo.msecnd.net/win/2015/11/slot-Drake-08-2000x1000.jpg
您的正則表達式無法正常工作,主要是因為(.\\S+)$
part中未轉義的點。 一個未轉發的.
匹配任何字符,但換行。 但是, \\S
匹配任何非空格,包括a .
。 除了不必要的回溯,你可能會得到一個意想不到的結果,如http://az648995.vo.msecnd.net/win/2015/11/slot-Drake-08-2000x1000-1024x512.MORE_TEXT_HERE.jpg
。
假設擴展名是最后一個點之后的字符串的一部分,您可以使用
-\d+x\d+(\.[^.\s]+)$
請參閱正則表達式演示
nagated字符類[^.\\s]
匹配任何字符,但是空格和文字.
符號。 請注意,在替換中使用回調函數沒有意義,您可以使用僅僅$1
反向引用。
JS演示:
var src = 'http://az648995.vo.msecnd.net/win/2015/11/slot-Drake-08-2000x1000-1024x512.jpg'; src = src.replace(/-\\d+x\\d+(.[^.\\s]+)$/, "$1"); document.body.innerHTML = src;
試着逃避.
你會沒事的:
/-\d+x\d+(\.\S+)$/
略微改變正則表達式更明確一點:
/-\d+x\d+(\.[^\s-]+)$/
正則表達式可以簡化為以下內容
更換
-\d+x\d+(\.\S+)
同
$1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.