簡體   English   中英

使用Javascript regexp僅匹配模式的最后一個實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM