RegEx将匹配string中最后一次出现的点
我有一个文件名,可以有多个点,可以结束任何扩展名:
tro.lo.lo.lo.lo.lo.png 
 我需要使用一个正则expression式来replace最后一次出现的点与另一个string,如@2x ,然后再次点(非常像视网膜图像文件名),即: 
 tro.lo.png -> tro.lo@2x.png 
这是我到目前为止,但它不会匹配任何东西…
 str = "http://example.com/image.png"; str.replace(/.([^.]*)$/, " @2x."); 
有什么build议么?
 你不需要这个正则expression式。  String.lastIndexOf会做。 
 var str = 'tro.lo.lo.lo.lo.lo.zip'; var i = str.lastIndexOf('.'); if (i != -1) { str = str.substr(0, i) + "@2x" + str.substr(i); } 
看到它的行动 。
更新:一个正则expression式的解决scheme,只是为了它的乐趣:
 str = str.replace(/\.(?=[^.]*$)/, "@2x."); 
 匹配一个字面点,然后断言( (?=)是正向 ),直到string末尾没有其他字符是一个点。 replace应该包括一个匹配的点,除非你想删除它。 
 只需在replacestring中使用特殊replace模式 $1 : 
 console.log("tro.lo.lo.lo.lo.lo.png".replace(/\.([^.]+)$/, "@2x.$1")); // "tro.lo.lo.lo.lo.lo@2x.png" 
 您可以使用expression式\.([^.]*?) : 
 str.replace(/\.([^.]*?)$/, "@2x.$1"); 
 您需要引用$1子组以将该部分复制回结果string中。 
工作演示 http://jsfiddle.net/AbDyh/1/
码
 var str = 'tro.lo.lo.lo.lo.lo.zip', replacement = '@2x.'; str = str.replace(/.([^.]*)$/, replacement + '$1'); $('.test').html(str); alert(str); 
匹配从string开始到(包括)最后一次字符使用的所有字符:
 ^.*\.(?=[^.]*$) To match the last occurrence of the "." character ^.*_(?=[^.]*$) To match the last occurrence of the "_" character 
 使用\. 匹配一个点。 人物. 匹配任何字符。 
 因此str.replace(/\.([^\.]*)$/, ' @2x.') 。 
你可以这样做,
 > "tro.lo.lo.lo.lo.lo.zip".replace(/^(.*)\./, "$1@2x"); 'tro.lo.lo.lo.lo.lo@2xzip' 
为什么不简单地拆分string并将所述后缀添加到倒数第二个条目中:
 var arr = 'tro.lo.lo.lo.lo.lo.zip'.split('.'); arr[arr.length-2] += '@2x'; var newString = arr.join('.'); 
 'tro.lo.lo.lo.lo.lo.png'.replace(/([^\.]+).+(\.[^.]+)/, "$1.@x2$2") 
- 如何在Python中使用正则expression式validationURL?
 - 使用htaccess从url中删除.php
 - 如何在grep中做一个非贪婪的匹配?
 - 在JavaScript中使用dynamic(可变)string作为正则expression式模式
 - 如何检索JavaScript中的正则expression式的所有匹配?
 - RegExp的exec()函数和String的match()函数有什么区别?
 - 正则expression式匹配有效的正则expression式
 - JS中的正则expression式中需要使用caret(^)和dollar符号($)吗?
 - 包含至less8个字符,1个数字,1个大写和1个小写字母的javascript正则expression式