programing

문자열에서 마지막 점과 일치하는 정규식

kingscode 2021. 1. 17. 10:58
반응형

문자열에서 마지막 점과 일치하는 정규식


여러 개의 점을 포함 할 수 있고 어떤 확장자로도 끝날 수있는 파일 이름이 있습니다.

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

정규식을 사용하여 점의 마지막 발생을 다른 문자열과 같은 다른 문자열로 @2x바꾼 다음 점을 다시 (망막 이미지 파일 이름과 매우 유사 함) 즉 :

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

지금까지 내가 가지고있는 것이 있지만 일치하는 것이 없습니다 ...

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.");

리터럴 점이 일치하고 (주장 (?=)입니다 긍정적 예측 문자열의 끝에 다른 문자까지이 점이 없다는 것을). 제거하려는 경우가 아니라면 교체에는 일치하는 점 하나가 포함되어야합니다.


그냥 사용하는 특별한 교체 패턴 $1 대체 문자열을 :

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


다음 식을 사용할 수 있습니다 \.([^.]*?).

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

$1부분을 ​​결과 문자열로 다시 복사 하려면 하위 그룹 을 참조해야 합니다.


작업 데모 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);

문자열의 시작부터 마지막 ​​문자까지 (포함) 모든 문자를 일치 시키려면 다음을 사용하십시오.

^.*\.(?=[^.]*$)  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'

단순히 문자열을 분할하고 마지막 항목에서 두 번째 항목에 해당 접미사를 추가하지 않는 이유는 무엇입니까?

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")

참조 URL : https://stackoverflow.com/questions/11134004/regex-that-will-match-the-last-occurrence-of-dot-in-a-string

반응형