2009-07-30 6 views
0

패턴과 일치하는 세미콜론으로 구분 된 문자열에서 첫 번째 사용자 권한을 추출하려고합니다.csv 문자열을 검색하고 자바 스크립트 정규식을 사용하여 일치를 반환하는 방법

사용자 권한 형식으로 저장됩니다 : 사용자가 어떤 권한이없는 경우 LAA;LA_1;LA_2;LE_3;

문자열이 비어 있습니다. 이 .*?;(LA_[^;]*)?.*

(그룹의 끝에있는 물음표 경우 사용자의 전체 라인을 일치하기 위해 사용 된이 가지고 있지 :

내 가장 좋은 방법은 지금까지 regex.replace 문에 다음과 같은 정규식을 사용하는 것입니다 오른쪽 빈 문자열로 대체 그녀가이 없음을 알리기 위해)

그러나,이 케이스 첫 번째 위치에 바로 검색에서 제대로 작동하지 않습니다. LA_1;LA_2;LE_3;

그것은이다 그냥 고칠 수있어. regex 바꾸기 전에 줄의 시작 부분에 세미콜론을 추가하지만 내 질문은 다음 정규식과 일치하지 않는 이유는 무엇입니까?

.*?(?:(?:^|;)(LA_[^;]*))?.*

지금까지 성공하지 않고 해결책을 찾을 수많은 다른 정규 표현식을 시도했습니다. 에서 (

function getFirstRight(rights) 
{ 
    return rights.split(";",1)[0] || ""; 
} 

답변

0

내가 바로 질문을 얻을 수 있지만, 당신은 명확한 이유를과 복잡함을하는 사용하는 정규 표현식에 관해서 확실하지 않다 :

+0

감사! 여하튼 나는 match-function을 간과했고 "쉬운 해결책"은 여전히 ​​버그를 가지고있었습니다. :) 나는 당신의 아이디어를 actionscript3에 이식했고 이제 다음과 같은 형식을 가지고 있습니다 : ' public function getRole() : String { (LA _ [^;] *) /. test (this._rightsList)))? this._rightsList.일치 (/ (^ |;) (LA _ [^;] *) /) [2] : ""; } ' –

0

당신은 먼저 문자열을 분할 수 적어도 나에게). 당신은 같은 것을 할 수 있습니다 : 특정 질문에 대답하기

function getFirstRight(rights) { 
    var m = rights.match(/(^|;)(LA_[^;]*)/) 
    return m ? m[2] : ""; 
} 
+0

죄송합니다. 귀하가 답변하기 전에 권리와 정규 표현식의 형식이 잘못되었습니다. LAA의 경우 LA_1, LA_2, LE_3; "LAA"를 반환하지만 올바른 것은 "LA_1"입니다. –

0

를 하나의 문제는 처음에 이것의 혼합 "하지 다음 정규식 일치를 않는 이유는 무엇입니까?"입니다 : 결국

.*? 

은 말처럼 당신은 시작 또는 세미콜론 중 하나에 도달 할 때까지 여분의 문자를 건너 뛸 수있는 어떤

^|; 

: 하였다. 그러나 무엇이든 건너 뛸 수는 없으며 나중에 시작 부분에 도달 할 수 있습니다 (다중 행 문자열에 줄 바꿈이 포함되지 않은 경우). 이 같은

뭔가 작동합니다

.*?(\bLA_[^;]).* 

의 의미는, "LA_"다음 단어 경계까지 문자를 건너.

+0

답변 해 주셔서 감사합니다. Somewhy. *? (\ bLA _ [^;] *)?. * 여전히 일치하지 않습니다 ... 결국 물음표는 0 또는 하나의 일치 항목을 찾는 것입니다. 제거하면 하나의 일치 항목과 정확히 일치합니다. match-function을 사용하여 문제를 해결했지만 마지막 정규식이 일치하지 않는 이유를 알고 싶습니다. –

+0

댓글에 '*'이 추가 된 것 같습니다. 당신이 당신의 코드에서 그것을 시도하기 전에 거기에 도착했는지, 또는 다른 것이 당신을 위해 처음부터 문제를 일으켰는지 확실하지 않습니다. 하지만 어쨌든 두 번 확인했는데 두 문자열, 그리고 둘 다 replace() 및 match()와 같이 작동하는 것으로 보입니다. var reg = /.*?(\bLA_[^;]).*/ var s1 = 'LAA; LA_1; LA_2; LE_3;'; var s2 = 'LA_1; LA_2; LE_3;'; 알림 (s1.replace (reg, '$ 1')); 알림 (s2.replace (reg, '$ 1')); 알림 (s1.match (reg) [1]); 알림 (s2.match (reg) [1]); – epost

관련 문제