JavaScript Regex를 사용하여 CSV 문자열을 검색하고 매치를 반환하는 방법

StackOverflow https://stackoverflow.com/questions/1204485

  •  05-07-2019
  •  | 
  •  

문제

패턴과 일치하는 세미콜론 분리 문자열에서 첫 번째 사용자 오른쪽을 추출하려고합니다.

사용자 권한은 형식으로 저장됩니다. LAA;LA_1;LA_2;LE_3;

사용자에게 권한이 없으면 문자열이 비어 있습니다.

지금까지 가장 좋은 솔루션은 Regex.replace에서 다음 Regex를 사용하는 것입니다. .*?;(LA_[^;]*)?.*

(그룹 끝의 물음표는 사용자가 권리가없고 비어있는 문자열로 교체하기 위해 전체 라인을 일치시키기위한 것입니다.)

그러나 검색 된 오른쪽이 첫 번째 위치에있는 경우 올바르게 작동하지 않습니다. LA_1;LA_2;LE_3;

REGEX 교체 전에 줄의 시작 부분에 세미콜론을 추가하여 쉽게 해결할 수 있지만 내 질문은 왜 다음과 같은 동정인이 일치하지 않습니까?

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

나는 해결책을 찾기 위해 수많은 다른 정규 표현을 시도했지만 지금까지는 성공하지 못했습니다.

도움이 되었습니까?

해결책

나는 당신의 질문을 올바르게 얻는 확신이 없지만, 당신이 사용하는 정규 표현과 관련하여, 당신은 명확한 이유없이 그것들을 과도하게 복잡하게하고 있습니다 (적어도 나에게는 그렇지 않습니다). 당신은 다음과 같은 것을 원할 수 있습니다.

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

다른 팁

먼저 문자열을 분할 할 수 있습니다.

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

구체적인 질문에 대답하려면 "다음과 같은 정규식이 왜 일치하지 않습니까?"

.*?

결국 :

^|;

시작이나 세미콜론에 도달 할 때까지 추가 캐릭터를 건너 뛰는 것과 같습니다. 그러나 당신은 아무것도 건너 뛰지 못한 다음 나중에 시작에 도착합니다 (멀티 린 스트링에 신생을 포함하지 않는 한).

이와 같은 것이 작동합니다.

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

즉, 단어 경계 뒤에 "la_"가 끝날 때까지 문자를 건너 뛰십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top