regex


Parsing email with Google Apps Script, regex issue?


I used to be quite proficient in VBA with excel, but I'm currently trying to do something with Google Scripts and I am well and truly stuck.
Basically, I am trying like to extract data out of a standardised email from Gmail into a Google sheet. There are a couple of other threads on the subject which I have consulted so far, and I can get the body of the email into the sheet but cannot parse it.
I am new to regex, but it tests OK on regex101
I am also brand new to Google Script, and even the debugger seems to have stopped working now (it did before, so would be grateful if anyone can suggest why this is).
Here is my basic function:
function processInboxToSheet() {
var label = GmailApp.getUserLabelByName("NEWNOPS");
var threads = label.getThreads();
// Set destination sheet
var sheet = SpreadsheetApp.getActiveSheet();
// Get all emails labelled NEWNOPS
for (var i = 0; i < threads.length; i++) {
var tmp,
message = threads[i].getMessages()[1], // second message in thread
content = message.getPlainBody(); // remove html markup
if (content) {
// search email for 'of:' and capure next line of text as address
// tests OK at regex101.com
property = content.match(/of:[\n]([^\r\n]*)[\r\n]/);
// if no match, display error
var property = (tmp && tmp[1]) ? tmp[1].trim() : 'No property';
sheet.appendRow([property]);
} // End if
// remove label to avoid duplication
threads[i].removeLabel(label)
} // End for loop
}
I can append 'content' to the sheet Ok, but cannot extract the address text required by the regex. Content displays as follows:
NOPS for the purchase of:
123 Any Street, Anytown, AN1 1AN
DATE: 05/05/2017
PRICE: £241,000
Seller’s Details
NAME: Mrs Seller
Thanks for reading :)
The return value of .match() is an array. The first captured group, containing the address, will be at index 1.
Based on the following line after your call to .match(), it looks like the tmp variable should have been assigned that array, not the property variable.
var property = (tmp && tmp[1]) ? tmp[1].trim() : 'No property';
That line says, if .match() returned something that isn't null and has a value at index 1, then trim that value and assign to property, otherwise assign it the string 'No property'.
So, try changing this line:
property = content.match(/of:[\n]([^\r\n]*)[\r\n]/);
To this:
tmp = content.match(/of:[\n]([^\r\n]*)[\r\n]/);

Related Links

how to capture every single match of a repeated pattern? [duplicate]
Regex to find immediate duplicate tag
Is it possible to reliably determine if a given regular expression will match any string? [duplicate]
Google Analytics - Using Regex Filter URL with Request URI
Regex parse a list of comma separated number ranges, and capture them in individual groups
Qt 4.8.4 MAC Address QRegExp
Apache Configuration Location Match exclusion
REGEX - How to match set of string with at least one special character anywhere?
Regular Expressions: find same words in a dictionary in a line
Debug Regular expression using RegexBuddy
Apache rewrite rule regex
Generate an abbreviation from a string in perl using regular expressions
Re-order columns in a text file by a specific pattern
Is there a reason to NOT use double quotes in a CSV file?
Perl regex: second pattern match based on the first one
Extracting Xpath or RegEx in Jmeter for a verification token?

Categories

HOME
wpf
magento
lua
apt-get
saml
textbox
visual-studio-2012
angular-mdl
ibm-midrange
webdriver-io
apache-spark-sql
drag
oracle-ucm
google-weather-api
command-line-arguments
yii2-advanced-app
lighttpd
angular-components
jruby
dotnetbar
hough-transform
stylesheet
parallax
yii1.x
text-parsing
google-geocoder
mobile-center
breakpoint-sass
scom
lync
html-select
google-domain-api
bcel
nav
response
mindstorms
subscription
android-studio-2.1
oracle-aq
pseudo-element
adal.js
glfw
kony
attributerouting
typesetting
android-identifiers
autogen
replicate
callkit
android-alertdialog
cglib
webclient-download
rras
accounts
vimeo-ios
relaxng
dnx
oracle-bi
document-ready
clipping
python-2.3
gem5
gevent-socketio
solr-boost
genexus-gam
smarty2
wintersmith
centering
sigkill
nolio
aps
cellular-automata
angularjs-google-maps
lightstreamer
ioerror
nsusernotificationcenter
broadcom
semantic-markup
mms-gateway
argumentexception
flexpaper
calloc
51degrees
rgba
time-limiting
orthographic
codi
jquery-1.3.2
xtratreelist
pinging
help-authoring

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App