[javascript] JavaScript의 문자열에서 파일 확장자를 자르는 방법은 무엇입니까?

예를 들어, 파일 이름이 될 수있는 위치 x = filename.jpg를 가정하고 싶습니다 (파일 이름에는 단순화하기 위해 [a-zA-Z0-9-_] 만 포함되어 있다고 가정하십시오).filenamefilename

I 톱 x.substring(0, x.indexOf('.jpg'))DZone 조각 , 아닌 것 x.substring(0, x.length-4)더 잘 수행? 왜냐하면 length속성이며 문자 검사를 수행하지 않는 반면 indexOf()함수이며 문자 검사를 수행하기 때문입니다.



답변

확장의 길이를 알고 있으면 사용할 수 있습니다 x.slice(0, -4)(여기서 4는 확장 및 점의 세 문자 임).

길이를 모르면 @John Hartsock 정규식이 올바른 접근 방법입니다.

정규 표현식을 사용하지 않으려면 다음을 시도해보십시오 (성능이 낮음).

filename.split('.').slice(0, -1).join('.')

확장자가없는 파일에서는 실패합니다.


답변

확실하지 빠르게 수행 할 것입니다하지만이 같은 확장에 관해서이 더 안정적 일 것입니다 무슨 .jpeg또는.html

x.replace(/\.[^/.]+$/, "")


답변

에서 Node.js를 다음과 같이 확장자가없는 파일의 이름을 얻을 수있다.

const path = require('path');
const filename = 'hello.html';

path.parse(filename).name; // hello
path.parse(filename).ext;  // .html

Node.js 문서 페이지 에서 추가 설명 .


답변

x.length-43 자의 확장명 만 설명합니다. 당신은 어떤이있는 경우 filename.jpeg또는 filename.pl?

편집하다:

당신은 항상의 확장이있는 경우에 답변을 … 물론 .jpg, x.length-4잘 작동합니다.

그러나 확장의 길이를 모르는 경우 여러 가지 솔루션이 더 우수하고 강력합니다.

x = x.replace(/\..+$/, '');

또는

x = x.substring(0, x.lastIndexOf('.'));

또는

x = x.replace(/(.*)\.(.*?)$/, "$1");

OR (파일 이름에 하나의 점만 있음)

parts = x.match(/[^\.]+/);
x = parts[0];

OR (점 하나만 있음)

parts = x.split(".");
x = parts[0];


답변

마지막 점이 확장 구분 기호라는 가정을 사용할 수 있습니다.

var x = 'filename.jpg';
var f = x.substr(0, x.lastIndexOf('.'));

파일 확장자가 없으면 빈 문자열을 반환합니다. 이 기능을 사용하여 수정하려면

function removeExtension(filename){
    var lastDotPosition = filename.lastIndexOf(".");
    if (lastDotPosition === -1) return filename;
    else return filename.substr(0, lastDotPosition);
}


답변

나는 읽기가 너무 어렵지 않은 하나의 라이너이기 때문에 이것을 좋아합니다.

filename.substring(0, filename.lastIndexOf('.')) || filename


답변

0.12.x 이전의 Node.js 버전에서 :

path.basename(filename, path.extname(filename))

물론 이것은 0.12.x 이상에서도 작동합니다.