2011-03-26 2 views
9

string.match()를 정규식과 함께 사용하면 일치하는 문자열은 반환되지만 일치하는 부분은 원래 문자열로 되돌릴 수 있습니다. string.search()를 수행하면 인덱스를 얻지 만 문자열의 일치하는 부분이 얼마나 긴지 반드시 알 필요는 없습니다. 둘 다 할 수있는 방법이 있나요? 의 문자열을 원래 문자열로 가져올 수 있습니까?정규 표현식의 끝 인덱스 찾기/일치

같은 결과를 다른 방식으로 반환한다고 가정하면 (아래) 다른 하나를 수행 할 수 있다고 가정합니다. 그러나보기에는 엉망이고 비효율적이며, 더 좋은 방법이 있다고 생각합니다. 대안

var str = "Fear leads to anger. Anger leads to hate. Hate leads to suffering"; 

var rgx = /l[aeiou]+d/i; 
var match = str.match(rgx); 
if (match && match[0]) { 
    var i = str.search(rgx); 
    console.log ("end of match is at index " + (i+match[0].length)); 
    } 

답변

10

.match가 다음 특성을 가진 새로운 배열을 반환

Index 속성 완전한 문자열 내의 일치하는 하위 의 위치로 설정 S.

입력 속성이 S로 설정됩니다.

길이 속성은 n +1로 설정됩니다.

0으로부터 속성 (. I. S E 부분 제가 및 offset로부터 전용 E 오프셋 사이) 일치 문자열로 설정된다.

i> 0 및 i < = n과 같은 각 정수 i에 대해 ToString (i)이라는 속성을 r의 캡처 배열의 i 번째 요소로 설정합니다. http://bclary.com/2004/11/07/#a-15.10.6.2

match.index에서

는 당신이 필요로하는 것을 제공 할 것입니다.

+0

흥미 롭다 .... 나는 크롬이 배열에 인덱스를 둔다는 것을 알아 챘다. (당신은/g가 없다고 가정하고 여러 개의 일치가있을 것이고 하나의 인덱스를 갖는 것이 합리적이지 않을 것이다) . 모든 합리적인 브라우저 (...?)가이를 지원한다면 완벽합니다. – rob

0

:

if (match && match[0]) { 
    console.log ("end of match is at index " + (str.indexOf(match[0]) + match[0].length)); 
} 
+1

여러분이 맞을 것 같습니다. 일치하는 [0]에 대한 indexOf를 수행하면 항상 첫 번째로 나타납니다. 말하자면, 문자열의 두 번째 발생을 줄 수있는 이상한 정규 표현식이 없다면 ...? – rob

관련 문제