仅将模式的最后一个实例与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正则表达式引擎。