2012-12-31 5 views
0

내가 좋아하는, (기본적으로 \\을 사용는 Server.MapPath를 사용하여) C#으로 만든 경로에서 파일 이름을 제거하기 위해 노력하고있어 :Windows에서 파일 이름 바꾸기 '\'경로

C:\\Foo\\Bar\\Baz\\file.js 

나의 현재 정규식 RegExr 다소 작동하는 것으로 보이지만, 실제 응용 프로그램에서는 반대 방향으로 작동합니다

\/[^\\]+$ 

나는 무엇을 놓치고?

+1

질문에 올바르게 태그를 추가하십시오. – ocodo

답변

3

당신이 JS에서이 일을하고 있기 때문에 그냥 String.split 작업을한다.

var path = "C:\\Foo\\Bar\\Baz\\file.js"; 
var separator = "\\"; 

function getFilenameFromPath(path, separator){ 
    var segmented = path.split(separator); 
    return segmented[segmented.length-1]; 
} 

console.log(getFilename(path, separator)); 

정규식 방법

... 그런데

은 원래 정규식 잘못 유일한 것은 최고의 \과 손톱이/

/[^\\]+$/ 

겠습니까 누락되었습니다. 합니다 (@JDwyers에 /g 후행 대답은 그 사용 사례에 대한 중복, 그것은에게 글로벌 경기를하는 것입니다.)

그래서 ...

path.match(/[^\\]+$/); // == "file.js" 

건배

+0

이렇게 할 수는 있지만 정규 표현식을 찾고 있습니다. 아직도 정당한 대답. +1 –

+0

@JDwyers RegEx가 올바르게 작동합니다. – ocodo

+0

@mike_hornbeck^상기 참조. – ocodo

0

왜 정규식을 사용하고 있습니까? Path 클래스에서이 작업을 수행하기 위해 제공하는 함수가있을 때 그것은 과잉이다 :

string dirName = Path.GetDirectoryName(filename); 

등의 파일 이름, 확장자, 경로 루트,

+0

phantomjs 파일에서 javascript로 파일 이름을 제거하고 있기 때문에 이전에 할 수 없습니다. –

+3

말은 ... 자바 스크립트에서 파일 이름을 삭제하려고하는 것입니까? 그렇다면이 질문은 C#이 아니라 javascript로 태그되어야합니다. 그렇지 않으면 전 완전히 당신을 좇지 않을 것입니다. –

3
를 추출하는 경로 클래스의 유사한 기능도 있습니다

은 정규식으로 유지 :

var s = "C:\\Foo\\Bar\\Baz\\file.js"; 
var fileName = s.match(/[^​​​​​​\\]+$/​​​​​​​​​​​​g); 
+0

내 나쁜, JS 콘솔 borked;) 잘 작동합니다. – ocodo

+0

'g'는 여기에 중복됩니다. OP의 원래 정규 표현식은'\'과'/'가 없기 때문에 정확합니다. – ocodo

1

를 디렉터리를 원하기 때문에 경로를 사용하여 파일 이름을 제거하면 다음과 같이 표시됩니다.

var path = "C:\\Foo\\Bar\\Baz\\file.js"; 
var separator = "\\"; // make it OS agnostic. 
var result=""; 

function getFilename(path, separator){ 
    var segmented = path.split(separator); 
    for(var i=0; i<segmented.length-1;i++) 
    { 
     result+=segmented[i]+"\\\\"; 
    } 
    return result; 
} 
alert(getFilename(path, separator));