63

複数のドットを含むことができ、任意の拡張子で終わるファイル名があります。

tro.lo.lo.lo.lo.lo.png

正規表現を使用して、最後のドットを次のような別の文字列に置き換えてから、ドットを@2x再度置き換える必要があります(網膜画像のファイル名と非常によく似ています)。

tro.lo.png -> tro.lo@2x.png

これが私がこれまでに持っているものですが、何にも一致しません...

str = "http://example.com/image.png";
str.replace(/.([^.]*)$/, " @2x.");

助言がありますか?

4

9 に答える 9

113

これには正規表現は必要ありません。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);
}

実際に見てください

更新:楽しみのためだけの正規表現ソリューション:

str = str.replace(/\.(?=[^.]*$)/, "@2x.");

リテラルのドットに一致し、文字列の末尾までの他の文字がドットではないことをアサートします ( (?=)is positive lookahead )。削除したくない場合を除き、置換には一致した 1 つのドットを含める必要があります。

于 2012-06-21T08:12:02.923 に答える
30

置換文字列で特別な置換パターン を使用するだけ$1です:

console.log("tro.lo.lo.lo.lo.lo.png".replace(/\.([^.]+)$/, "@2x.$1"));
// "tro.lo.lo.lo.lo.lo@2x.png"

于 2012-06-21T08:16:10.657 に答える
6

次の式を使用できます\.([^.]*?)

str.replace(/\.([^.]*?)$/, "@2x.$1");

サブグループを参照して、その$1部分を結果の文字列にコピーして戻す必要があります。

于 2012-06-21T08:13:20.313 に答える
5

動作デモ 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);
​
于 2012-06-21T08:15:42.203 に答える
3

文字列の先頭から最後の文字の出現まで (およびそれを含む) のすべての文字に一致させるには、次のようにします。

^.*\.(?=[^.]*$)  To match the last occurrence of the "." character

^.*_(?=[^.]*$)   To match the last occurrence of the "_" character
于 2013-10-15T21:07:13.170 に答える
2

\.ドットを一致させるために使用します。文字は任意.の文字に一致します。

したがってstr.replace(/\.([^\.]*)$/, ' @2x.')

于 2012-06-21T08:12:01.530 に答える
1
'tro.lo.lo.lo.lo.lo.png'.replace(/([^\.]+).+(\.[^.]+)/, "$1.@x2$2")
于 2015-12-16T17:14:19.250 に答える
1

あなたは単にこのようにすることができます、

> "tro.lo.lo.lo.lo.lo.zip".replace(/^(.*)\./, "$1@2x");
'tro.lo.lo.lo.lo.lo@2xzip'
于 2014-09-21T04:33:38.813 に答える
1

単純に文字列を分割して、最後から 2 番目のエントリに上記のサフィックスを追加してみませんか。

var arr = 'tro.lo.lo.lo.lo.lo.zip'.split('.');
arr[arr.length-2] += '@2x';
var newString = arr.join('.');
于 2014-10-22T04:46:09.663 に答える