複数のドットを含むことができ、拡張子で終わるファイル名があります:
tro.lo.lo.lo.lo.lo.png
正規表現を使用して、最後に出現したドットを@2x
のような別の文字列に置き換えてから、再びドット(Retina画像ファイル名に非常によく似ています)を置き換える必要があります:
tro.lo.png -> [email protected]
ここに私がこれまで持っているものがありますが、何にもマッチしません...
str = "http://example.com/image.png";
str.replace(/.([^.]*)$/, " @2x.");
助言がありますか?
これには正規表現は必要ありません。 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.");
リテラルドットに一致してからアサート((?=)
は positive lookahead )で、文字列の最後まで他の文字はドットではありません。置換には、削除する場合を除き、一致した1つのドットを含める必要があります。
特別な置換パターン$1
置換文字列内:
console.log("tro.lo.lo.lo.lo.lo.png".replace(/\.([^.]+)$/, "@2x.$1"));
// "[email protected]"
式\.([^.]*?)
を使用できます。
str.replace(/\.([^.]*?)$/, "@2x.$1");
$1
サブグループを参照して、結果の文字列に部分をコピーする必要があります。
working demohttp://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);
文字列の先頭から最後の文字が出現するまで(およびその文字を含む)すべての文字を一致させるには、次を使用します。
^.*\.(?=[^.]*$) To match the last occurrence of the "." character
^.*_(?=[^.]*$) To match the last occurrence of the "_" character
_\.
_を使用して、ドットに一致させます。文字_.
_はany文字に一致します。
したがって、str.replace(/\.([^\.]*)$/, ' @2x.')
。
'tro.lo.lo.lo.lo.lo.png'.replace(/([^\.]+).+(\.[^.]+)/, "$1.@x2$2")
文字列を単純に分割し、2番目から2番目のエントリに上記のサフィックスを追加しないのはなぜですか。
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.Zip".replace(/^(.*)\./, "$1@2x");
'tro.lo.lo.lo.lo.lo@2xzip'