예를 들어이 문자열 -- This -- is -- one -- another -- comment --
이 있습니다. 일치하는 요소가 "This", "is", "one", "another"및 "comment"가되기를 원합니다.
--\s+([^--]+)\s+--
"This", "one"및 "comment"와 같은 일치하는 요소를 제공 하는이 정규식 을 시도했습니다.
나는 다른 문제가 검색 한, 그들은 모두이 즉 같은 솔루션을 제공 #A#
하고 나는 얻을 것이다 A
하지만 위해 #A#B#
또한 내가 얻을 수 A
있지만,이 경우 내가 두 요소를 원하는 A
및 B
둘 다 둘 개 사이이기 때문에 #
문자.
나는 자바 스크립트 정규식에 대해 테스트하고 있지만 솔루션은 플랫폼 / 언어에 관계없이 있어야한다고 생각합니다.
일반적으로 다음과 같은 패턴을 사용해야합니다.
STRING([\s\S]*?)(?=STRING|$)
일치 STRING
한 다음, 가능한 한 적은 0 개 이상의 문자를 그룹 1에 캡처합니다. STRING
*이 단어 바로 앞에서 중지 하는 첫 번째 발생 **까지 (?=...)
왜냐하면는 너비가 0 인 어설 션이므로 긍정적 인 예견 이기 때문 입니다. 일치하는 텍스트 또는 문자열 끝을 사용하지 않습니다.
패턴의 일반적인 변형은 다음과 같습니다.
STRING((?:(?!STRING)[\s\S])*)
문자 시퀀스를 시작하지 않는 0 개 이상의 발생 문자와 일치 하는 강화 된 탐욕스러운 토큰 ,을 사용합니다 .(?:(?!STRING)[\s\S])*
STRING
현재 솔루션의 모든 하위 문자열을 얻으려면 다음과 같은 lookahead를 사용하십시오.
/--\s+([\s\S]*?)(?=\s+--)/g
^^^^^^^^^
regex 데모를 참조하십시오 .
이 [^--]+
아닌 하나 이상의 기호와 일치 -
하지만 같지 않은 텍스트는 일치하지 않습니다 --
. 단일 문자 [...]
와 일치하는 문자 클래스입니다 . 한 문자에서 패턴의 첫 번째 발생까지 길이에 관계없이 모든 텍스트를 일치 시키려면 가능한 한 적은 0+ 문자 (게으른 수량 자로 인해)와 같은 구성을 사용할 수 있습니다 .[\s\S]*?
*?
JS 데모 :
var s = '-- This -- is -- one -- another -- comment --';
var rx = /--\s+([\s\S]*?)(?=\s+--)/g;
var m, res=[];
while (m = rx.exec(s)) {
res.push(m[1]);
}
console.log(res);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다