정규 표현식에서 그룹 선택자에 대한 모든 연속 일치를 얻으려면 어떻게해야합니까? 모든 일치 (처음뿐 아니라)는 글로벌 플래그 (/ g)를 사용해야 함을 의미하지만 글로벌 플래그를 사용하면 myString.match ( 또는 RegExp.exec (myString)을 통해 결과 배열에서 그룹을 가져올 수 없습니다. 이 두 가지 기능은 글로벌 플래그와 그룹 조합이 처음으로 일치하기 때문에 이러한 상황에서는 쓸모가 없습니다. 예를 들어한 줄의 "preg match all"은 JavaScript의 그룹과 일치합니다.
I는 인쇄 기 A-2 ㅋ 기 (B-2)의 을 MyString = '로렘 입숨 기 A-1 ㅋ 기 (B-1) 더미 단순히 텍스트를 그리고 조판 업계 ' 그리고 나는 group-a- * 및 group-b- * 쌍에 대한 모든 현상을보고 싶습니다.
내가 먼저 정규식을 사용하여 그룹과 whoole 부분을 일치시킬 수 있습니다 후 나는 그룹 (들)을 얻기 위해 두 번째 정규식 (그러나 글로벌 플래그를 사용하지 않고)을 사용해야합니다. 중고 myString.match() :
var matchesOne = myString.match(/(group-a-[0-9]) blah (group-b-[0-9])/gi); // ["group-a-1 blah group-b-1", "group-a-2 blah group-b-2"]
for (var i = 0; i < matchesOne.length; i++) {
var matchesTwo = matchesOne[i].match(/(group-a-[0-9]) blah (group-b-[0-9])/i); // note missing global flag here
console.log("WHOLE: " + matchesTwo[0] + ";", "GROUP-A: " + matchesTwo[1] + ";", "GROUP-B: " + matchesTwo[2] + ";");
}
// Result:
// WHOLE: group-a-1 blah group-b-1; GROUP-A: group-a-1; GROUP-B: group-b-1;
// WHOLE: group-a-2 blah group-b-2; GROUP-A: group-a-2; GROUP-B: group-b-2;
Developer mozilla 사이클 동안 사용하여 유사한 솔루션을 권장합니다. 중고 RegExp.exec (mystring에) :
var matches, myRegExp = /(group-a-[0-9]) blah (group-b-[0-9])/gi;
while ((matches = myRegExp.exec(myString)) !== null) {
console.log("WHOLE: " + matches[0] + ";", "GROUP-A: " + matches[1] + ";", "GROUP-B: " + matches[2] + ";");
}
// Result:
// WHOLE: group-a-1 blah group-b-1; GROUP-A: group-a-1; GROUP-B: group-b-1;
// WHOLE: group-a-2 blah group-b-2; GROUP-A: group-a-2; GROUP-B: group-b-2;
두 솔루션 정규식에게주기를 여러 번 실행이 필요합니다. 하지만 나는 PHP에서 preg_match_all()과 같은 쉬운 명령/함수를 사용하고 싶습니다. 가능한가?
그룹과 다른 대답은 주기적으로 RegExp를 반복해야하는 솔루션을 사용합니다. 이는 하나의 RegExp 만 실행하는 한 줄/한 명령 솔루션에 관한 것입니다. –
stackoverflow.com/a/983827/3832970에서 –
허용 대답은 처리하지 않습니다 http://stackoverflow.com/a/983827/3832970의 속는 사람을 더 나은 보이는 만들기 위해 조각을 사용할 수 있습니다 – mikep