2014-12-17 3 views
0

Gmail 첨부 파일의 CSV 파일에서 콘텐츠를 가져 오는 google apps 스크립트를 작성하고 있습니다. csv 데이터를 여러 배열로 분할해야합니다 (각 행은 자체 배열입니다). 나는 모든 것을 가지고있다.regex replace replace (google apps script)

내 문제는 : CSV 값 중 하나는 "도시, 세인트"형식입니다. 따라서 string.split (',')을 사용하여 배열을 분할하면 추가 "열"로 끝납니다. 이 문제를 해결하기위한 제 아이디어는 초기 문자열에서 해당 쉼표를 백업하고 종료하는 것이 었습니다. 여기에 내 코드의 관련 부분입니다 :

var attachments = msgs[i][j].getAttachments(); 
    for (var k = 0; k < attachments.length; k++) { 
     var attachmentData = attachments[k].getDataAsString(); 
     var regex = new RegExp('\,\s(?:[A-Z]{2}\")', 'gi'); 
     attachmentData.replace(regex,' '); 
... 

그래서 난 그냥 정확히 두 개의 문자, 다음 인용 부호 다음에 공백 쉼표를 찾을 수있다 할 노력하고있어. 쉼표를 공백으로 바꾸기를 원합니다. 나는 또한 시도했다

 var regex = new RegExp('(\,\s)([A-Z]{2}\")', 'gi'); 
     attachmentData.replace(regex,$2); 

운이없는.

Voice,Incoming,(###) ###-####,(###) ###-####,,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00:27,$0.000,-,, ,Incoming,(###) ###-####,,###,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00

사람이 내가 왜 작동하지 않습니다에로 보이지 않아요 무엇을 볼 수 : 여기에서이 작업을 실행하고있어 (매우 긴) 데이터 문자열의 무작위 표본이다? 바꾸기로 새 문자열을 반환로 문자열을 변경하지 않습니다

답변

1

The replace() method returns a new string with some or all matches of a pattern replaced by a replacement.

str.replace을 (또는?이 작업을 수행 할 수있는 더 좋은 방법의 어떤 아이디어가). 따라서 당신은

var regex = new RegExp('(,\\s)([A-Z]{2}")', 'gi'); 
var replacedData = attachmentData.replace(regex,'$2'); 

주 뭔가를 작성 할 수 있습니다

당신은 그런 다음이 상태 및 인쇄와 정규식을 사용할 수있다

var regex = new RegExp(',\\s([A-Z]{2}")', 'gi'); 
var replacedData = attachmentData.replace(regex,'$1'); 
+0

:: 마른 세수 물론 그 문자열을 대체하지 않습니다. 나는이 스크립트에서 너무 많은 배열로 작업을 해왔다. 고마워. 내가 대표를 만났 더라면 나는 상상했다. 편집 : "ReferenceError :"$ 2 "이 정의되지 않았습니다." 이걸 스크립트에 연결하면됩니다. – mulliweht

+0

@mulliweht 따옴표로'$ 2'를 싸야합니다. ( – nu11p01n73R

+0

은 감사합니다. – mulliweht

0

로 첫 번째 캡처 그룹을 삭제할 수 있습니다 공백과 함께 $1 블록을 다시 게시하십시오.

s = s.replace(/,([A-Z]{2}")/, ' $1'); 
       ^^  ^ ^^^ 
      comma ^^^^^^^^^  print back replacing comma with space 
        | 
        catch the group of space + two letters + " 
,

라이브를 참조하십시오 : ::

var s = 'Voice,Incoming,(###) ###-####,(###) ###-####,,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00:27,$0.000,-,, ,Incoming,(###) ###-####,,###,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00'; 
 
s = s.replace(/,([A-Z]{2})/, ' $1'); 
 
document.write(s)

+1

나는 단지 제 2의 하프를 붙잡는다라고하는 생각을 좋아한다. 감사. – mulliweht

+0

당신은 오신 것을 환영합니다! 그렇게 느끼면 upvote로 자유롭게 느껴보십시오. – fedorqui