JavaScript Regex를 사용하여 문자열을 추출하는 방법은 무엇입니까?


133

JavaScript Regex를 사용하여 파일에서 하위 문자열을 추출하려고합니다. 파일의 슬라이스는 다음과 같습니다.

DATE:20091201T220000
SUMMARY:Dad's birthday

추출하려는 필드는 "요약"입니다. 접근 방식은 다음과 같습니다.

extractSummary : function(iCalContent) {
  /*
  input : iCal file content
  return : Event summary
  */
  var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
  return(arr);
}

답변:


88

m 플래그 를 사용해야합니다 .

여러 줄; 시작 및 끝 문자 (^ 및 $)를 여러 행을 처리하는 것으로 취급합니다 (즉, 전체 입력 문자열의 시작 또는 끝만이 아니라 각 행의 시작 또는 끝 (\ n 또는 \ r로 구분)과 일치)

또한 *올바른 장소에 넣으십시오 .

"DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
//------------------------------------------------------------------^    ^
//-----------------------------------------------------------------------|

97
function extractSummary(iCalContent) {
  var rx = /\nSUMMARY:(.*)\n/g;
  var arr = rx.exec(iCalContent);
  return arr[1]; 
}

다음 변경 사항이 필요합니다.

  • *위에서 제안한대로 괄호 안에 넣습니다 . 그렇지 않으면 일치하는 그룹에는 하나의 문자 만 포함됩니다.

  • 의 제거 ^$. 전역 옵션을 사용하면 행의 시작과 끝이 아니라 전체 문자열의 시작과 끝에서 일치합니다. 대신 명시적인 줄 바꿈을 사용하십시오.

  • 전체 배열 대신 일치하는 그룹 (괄호 안에 무엇이 있는지)을 원한다고 가정하십시오. arr[0]전체 일치 ( "\nSUMMARY:...")이며 다음 색인에는 그룹 일치가 포함됩니다.

  • String.match (regexp)는 일치하는 배열을 반환합니다. 내 브라우저에서는 그렇지 않습니다 (Mac의 Safari는 그룹이 아닌 전체 일치 만 반환합니다).하지만 Regexp.exec (string) 작동합니다.


1
|| [null, null]경기가 실패하면 arrnull이되고 arr[1]예외를 던질 수 있기 때문에 이것을 @barkmadley와 결합 할 것입니다
Kunal

22

당신의 정규 표현은

/\nSUMMARY:(.*)$/g

내가 사용하고 싶은 작은 트릭은 기본적으로 배열과 일치하도록 할당하는 것입니다.

var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
return arr[0];

이렇게하면 사용하려고 할 때 성가신 유형 오류가 발생하지 않습니다. arr


2
match일치
Kunal

7

(.*)대신 (.)*시작이 될 것입니다. 후자는 줄의 마지막 문자 만 캡처합니다.

또한을 벗어날 필요가 없습니다 :.


-1

이것은 자바 스크립트로 iCal 파일을 구문 분석하는 방법입니다

    function calParse(str) {

        function parse() {
            var obj = {};
            while(str.length) {
                var p = str.shift().split(":");
                var k = p.shift(), p = p.join();
                switch(k) {
                    case "BEGIN":
                        obj[p] = parse();
                        break;
                    case "END":
                        return obj;
                    default:
                        obj[k] = p;
                }
            }
            return obj;
        }
        str = str.replace(/\n /g, " ").split("\n");
        return parse().VCALENDAR;
    }

    example = 
    'BEGIN:VCALENDAR\n'+
    'VERSION:2.0\n'+
    'PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n'+
    'BEGIN:VEVENT\n'+
    'DTSTART:19970714T170000Z\n'+
    'DTEND:19970715T035959Z\n'+
    'SUMMARY:Bastille Day Party\n'+
    'END:VEVENT\n'+
    'END:VCALENDAR\n'


    cal = calParse(example);
    alert(cal.VEVENT.SUMMARY);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.