2016-11-03 3 views
0

정규식을 사용하여 적은 CSS 사전 처리기 소스 코드 파일에서 변수를 추출하려고 시도하지만 더 일반적인 질문을 할 수 있습니다.정규식을 사용하여 Regex가 일치 그룹을 포함하지 않음

  • 입력 : @one: cat출력 : cat
  • 입력 : @one: dog;출력 : dog

나는 다음과 같이 작동 정규 표현식을 정교하게 할 필요가

'개'다음에 마지막 세미콜론을 기록해 둡니다.

나는이 거의 작업이 있습니다 new RegExp('^.*:\\s*(.*?);?');

하지만 내 마지막 ;?들이 경기를 (.*?)에서 제외되지 않습니다.

어떻게하면 욕심을 덜 끌 수 있습니까?

JsBin : "적은 욕심"을 만들기 http://jsbin.com/ludaqogexa/edit?js,console

+0

정말로 문자열 바꾸기를 수행해야합니까? 아니면 캡처 된 그룹에만 문자열을 설정하려고합니까? – HeadCode

답변

3

는 당신이 그랬던 것처럼 정량 후 ?를 추가하여 수행됩니다. 문제는 최종 앵커 $을 추가하지 않은 것입니다. 정규식이 예상대로 작동한다고 추가하면 문제가 생깁니다. 그 코너 케이스의 행동은 정규식 엔진에 달려 있습니다. 예를 들어 .NET 엔진은이 경우 단일 문자 (dog 경우는 d)와 일치하고 중지됩니다.

그러나 이것은 해결책이 아닙니다. 패턴을보다 정확하게 묘사해야하며 욕심이 일치하는 패턴으로도 작업 할 수 있습니다.

/^[^:]+:\s*([^;]+);?/; 
+0

OP 원본 시도가 작동하지 않는 이유를 알고 있습니까? 나는 관심이있다. 왜 캡쳐 그룹의 일부인가? – musefan

+0

@musefan 원래 정규 표현식에서 문제에 대한 설명으로 편집되었습니다. – Lucero

+0

@Lucero 감사합니다, 좋은 설명과 더 나은 접근법 –

관련 문제