2012-12-17 9 views
1

URL을 가져 와서 구문 분석하여 클라이언트가 서버의 루트 폴더 아래에있는 리소스를 요구하지 않는지 확인하는 작은 웹 서버 기능은 다음과 같습니다.Regex는 Linux에서 작동하지만 Windows에서는 작동하지 않습니다. - node.JS

function getUrl(url, resourceMap, rootFolder) { 
    var path = require('path'); 
    if (typeof resourceMap[url] !== 'undefined') { 
     return (path.join(rootFolder,resourceMap[url])); 
    } 
    var absoluteURL = path.join(rootFolder,url); 
    console.log("ROOT: "+rootFolder); 
    console.log("NEW: "+absoluteURL); 
    var regex = new RegExp('^' + rootFolder + '.*') 
    if (absoluteURL.match(regex) === null) { 
     console.log("FALSE"); 
     return (false); 
    } 
    return (absoluteURL); 
} 

당신은 내가이 리눅스에서 잘 작동 '^' + rootFolder + '.*'

정규식을 사용하여 rootFolder와 확인하십시오 absoluteURL 시작을하지만, 윈도우에 항상 false를 돌려 볼 수 있듯이.

은 BTW 출력은
ROOT: C:\Users\user\workspace 
NEW: C:\Users\user\workspace\images\IMG_7102.JPG 

그래서 내가 URL의 구문 분석 괜찮 것을 알고있다.

왜 에이미 아이디어? 감사합니다.

답변

3

Windows에서 경로의 \은 정규식에서 이스케이프 문자가됩니다. 당신은 regex-escape 필요

그것은 :

rootFolder.replace(/[-[\/{}()*+?.\\^$|]/g, "\\$&") 
+0

하지만 rootFolder는 'C : \\ 사용자 \\ 작업 공간을'로 지정되어 지금까지 내가 – Yotam

+0

@Yotam을 이해 문제가해서는 안 : I 그것이 문자 소스라고 가정합니다. 이러한 이스케이프는 문자열 리터럴을위한 것입니다. 문자열의 실제 값은 단일'\'을 갖습니다. – SLaks

관련 문제