2016-08-30 3 views
0

나는 다음과 같은 자바 스크립트 정규식이 : 같은 문자열에 적용되는비 - 욕심 많은 거꾸로 JavaScript 정규식?

/\!\[(.*?)\]\((.+?) \"(.*?)\"\)/g 

:

![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "test")<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)<br />![test](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png "test") 

regex101 link

난 데 문제는 4 별개의 가격 인하가되어야한다고를 태그 중 두 개는 일치해야하지만 두 개의 일치 항목은 다시 태그를 포함합니다.

이것은 정규식 파서가 루핑을 시작하면서 가능한 첫 번째 경기 시작점을 잡아 내고 나중에 경기 시작 지점이 있다는 사실에 관계없이 나머지 경기를 계속 검색하는 것처럼 보입니다. 내가 욕심이 아닌 ? 수식어로이 문제를 해결할 수있을 거라 생각했지만 그렇지 않은 것 같습니다.

제안 사항?

답변

1

Markdown 링크 중 두 개는 설명이 없지만 정규 표현식에서는 설명이 선택 사항이 아닙니다.

/\!\[(.*?)\]\((.+?)(?: \"(.*?)\")?\)/g 

(당신이 견고성을 필요로하는 경우 기존 마크 다운 파서를 사용한다하더라도)이 같은 의도하지 않은 긴 일치를 피하기 위해 링크 주소 부분에 특정 문자을 제외하는 것이 더 좋습니다.

/\!\[(.*?)\]\(([^)]+?)(?: \"(.*?)\")?\)/g 
+0

죄송합니다, 두 번째 표현이 실제로있다 :'/\!\[(.*?)\]\((.+?)\)/'하지만 관련 보이지 않았다. 기존의 파서를 사용하고 싶지만 그 중 누구도 필자가 가지고있는 모든 요구 사항 (링크, 서식, 표준 ul/ol 및 ol 유형, 각주/참조, 수학 기호 및 방정식의 중첩 목록) 코드 태그 인라인과 블록 형식 및 중첩 목록 내 등) 대부분의 코드는 코드화되었지만이 코드는 나에게 문제점을 제공합니다. – CoryG

+0

또한 유효한 URL 문자이기 때문에 괄호를 제한하지 않는 편이 좋겠지 만 그것은 희망적인 생각 일 수 있습니다. – CoryG

+0

정규식의 최상위 버전의 URL 구성 요소를 [here] (https://gist.github.com/hansifer/32bcba48c24621c2da78)의 URL 일치 프로그램에서 '^'을 (를) 마이너스로 바꿨 기 때문에이 코드를 올바른 것으로 표시했습니다. 끝에서'$'를 시작하면 그걸 던지는 모든 것에 잘 맞습니다. [예] (https://regex101.com/r/aN3yD1/1). – CoryG

관련 문제