Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅将模式的最后一个实例与Javascript regexp匹配_Javascript_Regex - Fatal编程技术网

仅将模式的最后一个实例与Javascript regexp匹配

仅将模式的最后一个实例与Javascript regexp匹配,javascript,regex,Javascript,Regex,我想从文件名中删除大小数据,如 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

我想从文件名中删除大小数据,如

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/slot-Drake-08-2000x1000-1024x512.jpg
这是预期的工作,我得到了

http://az648995.vo.msecnd.net/win/2015/11/Halo.jpg
但是如果我有一个像

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/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

尝试转义
,您会没事的:

/-\d+x\d+(\.\S+)$/

正则表达式可以简化为以下内容

替换

-\d+x\d+(\.\S+)


稍微更改正则表达式,使其更加明确:

/-\d+x\d+(\.[^\s-]+)$/

您的正则表达式无法按预期工作,主要原因是
(.\S+)$
部分中有一个未替换的点。未转义的
匹配除换行符以外的任何字符。但是,
\S
匹配任何非空白,包括
。除了不必要的回溯之外,您可能会使用类似于的字符串得到意外的结果

假设扩展名是字符串最后一个点之后的一部分,则可以使用

-\d+x\d+(\.[^.\s]+)$

nagated字符类
[^.\s]
匹配除空格和文字
符号外的任何字符。请注意,在replace中使用回调函数没有意义,您可以只使用
$1
反向引用

JS演示:

var src='1〕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+)$/
可能会返回意外的结果,因为
\S
也匹配
。捕获组是一个包含在一对未替换括号中的模式。
$n
称为替换反向引用。我使用regular-expressions.info中的术语,我认为它最能描述NFA正则表达式引擎。