2014-12-17 2 views
0

Я пишу скрипт приложений Google, который извлекает содержимое из файла CSV в приложении gmail. Мне нужно разбить данные csv на несколько массивов (каждая строка будет собственным массивом). У меня все получилось.regex заменить не заменяя (скрипт Google Apps)

Моя проблема заключается в следующем: одним из значений в 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

:: Facepalm :: Конечно, это не заменяет строку. Думаю, я слишком много работал в массивах. Спасибо за это. Я бы поднял голову, если бы у меня был представитель. EDIT: «Я получаю ReferenceError:« $ 2 »не определен». когда я вставляю это в скрипт. – mulliweht

+0

@mulliweht вы должны обернуть '$ 2' в кавычки, извините за опечатку :( – nu11p01n73R

+0

работал с '' s. Спасибо за связку. – 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

Мне нравится эта идея только захвата второй половины. Благодарю. – mulliweht

+0

Добро пожаловать! Не стесняйтесь повышать, если вам так хочется. – fedorqui

Смежные вопросы