JavaScript에서 문자열에서 파일 확장자를 자르는 방법
예를 들어, 다음과 같이 가정합니다.x = filename.jpg
갖고 싶다filename
서, snowledge.filename
임의의 파일명을 지정할 수 있습니다(간단히 하기 위해 파일명에 [a-zA-Z0-9-_]만 포함되어 있다고 가정합니다).
를 .x.substring(0, x.indexOf('.jpg'))
DZone의 스니펫에 수록되어 있지 않다.x.substring(0, x.length-4)
포먼먼 츠요시 면,,는length
하지 않는 반면, 는 문자 을 하지 않습니다.indexOf()
함수이며 문자 확인을 합니다.
이 더 , 이것은 때더할 수 ..jpeg
★★★★★★★★★★★★★★★★★」.html
x.replace(/\.[^/.]+$/, "")
node.js에서는 확장자가 없는 파일 이름을 다음과 같이 얻을 수 있습니다.
const path = require('path');
const filename = 'hello.html';
path.parse(filename).name; //=> "hello"
path.parse(filename).ext; //=> ".html"
path.parse(filename).base; //=> "hello.html"
자세한 내용은 Node.js 매뉴얼 페이지를 참조하십시오.
내선번호를 사용할 수 .x.slice(0, -4)
(4월 4일)
@John Hartsock regex 길이를 모르면 올바른 접근법이 될 것입니다.
정규 표현을 사용하지 않는 경우는, 다음의 조작을 실시합니다(퍼포먼스 저하).
filename.split('.').slice(0, -1).join('.')
확장자가 없는 파일에서는 실패합니다.
x.length-4
는, 3 번호만을 .filename.jpeg
★★★★★★★★★★★★★★★★★」filename.pl
편집:
★★★★★★★★★★★★★★…네, 만약 당신이 항상 의 연장을 가지고 있다면.jpg
,x.length-4
잘 될 거야
그러나 확장의 길이를 모르는 경우, 보다 나은 솔루션 또는 보다 견고한 솔루션이 다수 있습니다.
x = x.replace(/\..+$/, '');
OR
x = x.substring(0, x.lastIndexOf('.'));
OR
x = x.replace(/(.*)\.(.*?)$/, "$1");
OR(전제 파일 이름에는 도트가 1개뿐)
parts = x.match(/[^\.]+/);
x = parts[0];
OR(도트 1개만 포함)
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
Node.js 0.12 이전 버전.x:
path.basename(filename, path.extname(filename))
물론 이것은 0.12.x 이후에서도 동작합니다.
유효한 옵션인지는 모르겠지만 다음과 같은 방법을 사용합니다.
name = filename.split(".");
// trimming with pop()
name.pop();
// getting the name with join()
name.join('.'); // we split by '.' and we join by '.' to restore other eventual points.
내가 아는 한 가지 수술이 아니라 적어도 항상 효과가 있을 거야!
업데이트: Oneliner를 원하는 경우 다음을 참조하십시오.
(name.split('.').slice(0, -1)).join('.')
이것은 딜리미터가 문자열에 없는 경우에도 기능합니다.
String.prototype.beforeLastIndex = function (delimiter) {
return this.split(delimiter).slice(0,-1).join(delimiter) || this + ""
}
"image".beforeLastIndex(".") // "image"
"image.jpeg".beforeLastIndex(".") // "image"
"image.second.jpeg".beforeLastIndex(".") // "image.second"
"image.second.third.jpeg".beforeLastIndex(".") // "image.second.third"
다음과 같은 단일 라이너로도 사용할 수 있습니다.
var filename = "this.is.a.filename.txt";
console.log(filename.split(".").slice(0,-1).join(".") || filename + "");
편집: 이것은 보다 효율적인 솔루션입니다.
String.prototype.beforeLastIndex = function (delimiter) {
return this.substr(0,this.lastIndexOf(delimiter)) || this + ""
}
또 다른 원라이너:
x.split(".").slice(0, -1).join(".")
다음은 regex 기반의 다른 솔루션입니다.
filename.replace(/\.[^.$]+$/, '');
이것은 마지막 세그먼트만 잘라냅니다.
간단한 것:
var n = str.lastIndexOf(".");
return n > -1 ? str.substr(0, n) : str;
확장 확장 부분.jpeg
을 사용법
는 한때 모든..tar.gz
되지 않도록 따라서 닷은 되지 않습니다).2015-01-01.backup.tar
을 이용하다)
var name = "2015-01-01_backup.tar.gz";
name.replace(/(\.[^/.]+)+$/, "");
var fileName = "something.extension";
fileName.slice(0, -path.extname(fileName).length) // === "something"
경로를 ( " " " " )를 처리해야 :thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
해서 할 수 ' 경우 '마음'은 '마음'은 '마음'은 '마음'이 됩니다.
theName = thePath.split("/").slice(-1).join().split(".").shift();
결과는 Name == "filename"이 됩니다.
크롬 디버거의 콘솔 창에 다음 명령을 기록하십시오.
그 「」등)만을가 있는 :theNameWithExt = "filename.jpg"
theName = theNameWithExt.split(".").shift();
결과는 위와 같은 Name == "filename"이 됩니다.
주의:
- 첫 번째는 조금 느리지만 더 많은 작업을 수행하기 때문에 두 경우 모두 동작합니다. 즉, ex가 있는 경로 또는 파일 이름을 포함하는 특정 문자열에서 확장자를 사용하지 않고 파일 이름을 추출할 수 있습니다.한편, 두 번째는 지정된 변수에 ext like filename이 포함된 파일 이름만 사용할 수 있습니다.ext가 조금 더 빠릅니다.
- 두 솔루션 모두 로컬 파일과 서버 파일 모두에 대응합니다.
하지만 다른 답변과 비교한 성능이나 브라우저 또는 OS 호환성에 대해서는 아무 말도 할 수 없습니다.
작업 코드 조각 1: 완전한 경로
var thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg";
theName = thePath.split("/").slice(-1).join().split(".").shift();
alert(theName);
작업 코드 조각 2: 확장자를 가진 파일 이름
var theNameWithExt = "filename.jpg";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);
작업 코드 조각 2: 이중 확장자를 가진 파일 이름
var theNameWithExt = "filename.tar.gz";
theName = theNameWithExt.split("/").slice(-1).join().split(".").shift();
alert(theName);
Node.js가 전체 경로 유지 디렉토리에서 확장을 제거합니다.
예를 들어 https://stackoverflow.com/a/31615711/895245은path/hello.html
->hello
, 「」, 「」가 path/hello.html
->path/hello
, 쓸 수 있어요
#!/usr/bin/env node
const path = require('path');
const filename = 'path/hello.html';
const filename_parsed = path.parse(filename);
console.log(path.join(filename_parsed.dir, filename_parsed.name));
outputs 디렉토리도 마찬가지입니다.
path/hello
https://stackoverflow.com/a/36099196/895245도 이것을 실현하고 있습니다만, 이 어프로치가 의미적으로는 조금 더 즐겁습니다.
Node.js v10.15.2에서 테스트 완료.
꽤 늦었지만 플레인오래된 JS-를 사용하여 확장자가 없는 파일명을 취득하기 위한 다른 방법을 추가하겠습니다.
path.replace(path.substr(path.lastIndexOf('.')), '')
Javascript.replace()
하며, method를 사용하여 을 달성할 수 .이 표현을 사용하여 원하는 것을 달성할 수 있습니다.
// assuming var x = filename.jpg or some extension
x = x.replace(/(.*)\.[^.]+$/, "$1");
하시면 됩니다.path
종하하다
var MYPATH = '/User/HELLO/WORLD/FILENAME.js';
var MYEXT = '.js';
var fileName = path.basename(MYPATH, MYEXT);
var filePath = path.dirname(MYPATH) + '/' + fileName;
산출량
> filePath
'/User/HELLO/WORLD/FILENAME'
> fileName
'FILENAME'
> MYPATH
'/User/HELLO/WORLD/FILENAME.js'
이것은 regex 또는 indexOf를 사용하지 않고 파일 이름에서 확장자를 삭제하는 데 사용하는 코드입니다(indexOf는 IE8에서는 지원되지 않습니다).확장자는 마지막 '.' 문자 뒤에 오는 텍스트라고 가정합니다.
동작하는 장소:
- 확장자가 없는 파일: "myletter"
- 파일 이름: "my.letter.txt"
- 알 수 없는 파일 확장자 길이: "my.letter.filename"
코드는 다음과 같습니다.
var filename = "my.letter.txt" // some filename
var substrings = filename.split('.'); // split the string at '.'
if (substrings.length == 1)
{
return filename; // there was no file extension, file was something like 'myfile'
}
else
{
var ext = substrings.pop(); // remove the last element
var name = substrings.join(""); // rejoin the remaining elements without separator
name = ([name, ext]).join("."); // readd the extension
return name;
}
나는 그것을 위해 정규식을 사용하는 것을 좋아한다.그것은 짧고 이해하기 쉽다.
for (const regexPattern of [
/\..+$/, // Find the first dot and all the content after it.
/\.[^/.]+$/ // Get the last dot and all the content after it.
]) {
console.log("myFont.ttf".replace(regexPattern, ""))
console.log("myFont.ttf.log".replace(regexPattern, ""))
}
/* output
myFont
myFont
myFont
myFont.ttf
*/
위의 설명은 그다지 엄격하지 않을 수 있습니다.좀 더 정확한 설명을 원하시면 regex101로 가서 확인하시면 됩니다.
파일 이름 또는 파일 경로에 확장자가 여러 개 있을 수 있습니다.다음 사항을 고려하여 트리밍하십시오.
text = "/dir/path/filename.tar.gz"
output = text.replace(/(\.\w+)+$/,"")
출력 결과: "/filename/path/filename"
특히 입력에 여러 확장자가 있는 경우 파일 확장자 문제를 해결합니다.
또 하나의 라이너 - 우리는 우리의 파일이 jpg picture라고 가정합니다>> ex: var yourStr = 'test.jpg';
yourStr = yourStr.slice(0, -4); // 'test'
x.slice(0, -(x.split('.').pop().length + 1));
name.split('.').slice(0, -1).join('.')
코드 쓰는 걸 즐기면서...
x.substring(0, x.last) 같은 것을 사용합니다.Index Of('.').퍼포먼스를 추구한다면 javascript를 전혀 이용하지 마세요:-p 아니요, 99.9999%의 목적에 대해 한 가지 문장이 더 있어도 상관없습니다.
언급URL : https://stackoverflow.com/questions/4250364/how-to-trim-a-file-extension-from-a-string-in-javascript
'programing' 카테고리의 다른 글
열의 모든 값을 소문자로 업데이트 (0) | 2022.09.27 |
---|---|
MySQL에서 문자열로 동작하기 위한 breakdrop()에 상당합니다. (0) | 2022.09.27 |
개체 배열을 속성별로 정렬합니다. (0) | 2022.09.27 |
PDF 문서를 PHP의 미리보기 이미지로 변환하려면 어떻게 해야 합니까? (0) | 2022.09.27 |
동일한 테이블 mysql 저장 프로시저에서 조건이 다른 여러 카운트를 선택합니다. (0) | 2022.09.27 |