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式