2009-09-11 3 views
0
나는 PHP에서 다음과 같은 정규 표현식을 가지고있다. 그리고 자바 스크립트로 포팅하고 싶다. 여기 JavaScript가 나던 같은 것이 있지만 잘 모르겠다. 입니다. 나는 regularexpressions.info를 통해 PHP와 JS 정규식 사이의 diferences를 찾으려고 노력했지만 아무 것도 명백한 것을 볼 수 없다. 도움이 크게 감사하겠습니다 다시 한번 감사드립니다 편집 : 문제는 긍정적 인 lookbehind의 안에있는 것 같지만 포팅 할 수 없다는 뜻입니까?

답변

1

당신은 lookbehind하지 않습니다 (그리고 내다가 IE에서 문제가있다, 그래서 예를 들면, 최고도 피했다). 그러나 그것은 단지 그하자 '와'문자가 경기의 일부, 그리고 나중에 그들을 밖으로 던져 쉽게 :

var value= "hello,my,name,is,'mr jim'"; 
var match; 
var r= /'[^'\s][^']*'|"[^"\s][^"]*"|[^'",\s]+/g; 

while(match= r.exec(value)) { 
    var text= match[0]; 
    if ('"\''.indexOf(text.charAt(0))!=-1) // starts with ' or "? 
     text= text.substring(1, text.length-1); 
    alert(text); 
} 

또는 텍스트에서 따옴표를 분리하기 위해 괄호를 캡처 사용 :

var r= /'([^'\s][^']*)'|"([^"\s][^"]*)"|([^'",\s]+)/g; 

while (match= r.exec(value)) { 
    var text= match[1] || match[2] || match[3]; 
    alert(text); 
} 

(귀하의 for(var z in match) 문자열에 일치하는 각 패턴을 반복 할 것으로 짐작했다. 불행히도 JavaScript 쉽게 작동하지 않습니다.)

이 쉼표로 구분 된 목록을 구문 분석하는 데 가장 좋은 방법은 않을 수 있습니다; 당신이 들판의 한가운데에 공백이나 인용문이있다. 간단한 문자열 인덱싱 파서가 더 나은 방법 일 수 있습니다.

+0

이것은 완벽합니다. lookbehinds 이전에 정규 표현식을 제거한 다음 replace 함수를 사용하여 인용 부호를 제거하면 메소드가 훨씬 향상되었습니다! 고맙습니다! –

1

그게 (?<=) 자바 스크립트가 지원하지 않는 긍정적 인 모습입니다. 하지만 브라우저마다 자바 스크립트 구현이 크게 다르다는 것을 명심하십시오.

: SO question devoted to workaround이 있습니다.

+0

포팅을 시도 할 가치가 없으며 클라이언트 측 대신 모든 작업 서버 측에서 수행 할 가치가 있다고합니까? –

2

올바른 - 긍정적 인 lookbehinds가 작동하지 않습니다.

하지만 Javascript의 정규식에 대한 일반적인 정보와 마찬가지로 몇 가지 포인터가 있습니다. 당신이 정규식 개체를 사용하는 경우 패턴이 지금에 고정되어 있기 때문에, 당신이 당신의 백 슬래시를 탈출해야하는 대신

var regex = /^[a-z\d]+$/i; 

패턴 리터럴을 사용할 수 있습니다 - 당신은 정규식 개체를 사용할 필요가 없습니다

끈. 당신의 패턴에 동적 비트가있는 경우

var regex = new RegExp('^[a-z\\d]+$', 'i'); 

정규 표현식 객체의 가장 큰 장점은

var max = 4; 
var regex = new RegExp('\d{1,' + max + '}'); 
+0

피터 (Peter), 나는 보통 PHP를 고수하고 거의 정규 표현식을 사용하지 않는다고 말할 수있다.조언 해 주셔서 감사합니다. 나중에 참조 할 수 있도록이 점에 유의하십시오. –

관련 문제