大家好,这是我的第一个问题,我很欣赏这个社区在帮助大家方面做得多么好!
我遇到与this thread类似的问题 - 我的正则表达式就像regex101中的魅力一样,但在谷歌脚本中返回null。
我试图在许多项目上返回下一行:
新预订已确认!
杰克于10月22日抵达
发送消息确认入住详情或欢迎杰克。
杰克弗莱克 凤凰城,加利福尼亚,美国 Airbnb会员自2015年起向Jake发送消息: https://www.airbnb.com/z/q/;laskdf;lksjdf
逍遥游 https://www.airbnb.com/manage-listing/asdflkjsdf;lkajsfd
旅行详情 报到 太阳,10月22日 下午4点后的任何时间
结帐 10月26日星期四 上午11时
客人 13
确认码 H7XS0SA8 查看行程 https://www.airbnb.com/reservation/itinerary?code=aasdfasdf
付款 $ 275.50 x 4晚 $ 1102.00 清洁费 $ 180.00 客人付费 $ 1282.00 Airbnb费用 - $ 38.46 你赚了 $ 1243.54 在您的客人办理入住手续后的第二天,您提供的付款方式将被记入贷方。有关详情,请参阅您的交易记录。 您的客人支付了161.15美元的入住税。 Airbnb代表您支付这些税款。
为杰克的到来做好准备 提供方向 确认您的客人知道如何到达您的位置。 整理 清理所有共享空间。确保您的客人有干净的床单和毛巾。
客户支持
访问帮助中心 https://www.airbnb.com/help?eal_exp=asdfasdf
联系Airbnb https://www.airbnb.com/help/contact_us?eal_exp=asdfasdf
谢谢, Airbnb团队
电子邮件偏好设置 https://www.airbnb.com/users/notifications?eal_exp=asdfasdf
的Airbnb
function getNumberofGuests(message_body) {
var num_guests = message_body.match("Guests[\r\n]+([^\r\n]+)")[1];
Logger.log("num_guests: " + num_guests);
return num_guests;
}
日志 - num_guests:13
function getReservationID(message_body) {
var reservationID = message_body.match("Confirmation\scode[\r\n][^\r\n]+")[1];
Logger.log("reservationID: " + reservationID);
return reservationID;
日志 - reservationID:null
这让我发疯,因为我花了15个小时研究答案,但我仍然无法弄清楚。
由于某些原因,此显示中的正文格式已关闭,我尝试了30分钟,但仍然无法解决问题。在message_body中,它应该是" Check-in"," Checkout"," Guests"," Confirmation code"之后的新行。等等 - 当前显示空格的每个元素后面都有一个新行。
我也试过空间字符正则表达式,但仍然是null:
var regExp = new RegExp("Confirmation\scode[\s]^[^\s]+", 'g')
感谢Stack Overflow社区,我很乐意并感谢您对此的任何帮助! -Blaine
答案 0 :(得分:0)
我将数据加载到文件中,然后在以下代码中将文件加载到变量dt中:
function getMyData()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet()
var dt=myUtilities.loadFile('regex.txt');
var guests = dt.match(/^Guests (\d+)/m)[1];
var cf=dt.match(/^Confirmation code ([0-9A-Z]+)/m)[1];
var ui=HtmlService.createHtmlOutput(dt).append(Utilities.formatString('<br /><strong>Matches:</strong><br />Guests=%s<br />Confirmation Code=%s',guests,cf));
SpreadsheetApp.getUi().showModelessDialog(ui, 'Input Data & Extracted Parameters');
}
在使用正则表达式一段时间后,我得到了这个包含数据副本的输出:
m标志用于多行。
以下是包含一些其他参数的新代码:
function getMyData()
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet()
var dt=myUtilities.loadFile('regex.txt');
var guests = dt.match(/^Guests (\d+)/m)[1];
var cf=dt.match(/^Confirmation code ([0-9A-Z]+)/m)[1];
var chout=dt.match(/^Checkout (.*)$/m)[1];
var chin=dt.match(/^Trip details (.*)$/m)[1];
var payout=dt.match(/Guest Pays ([$.0-9]+)/m)[1];
var ui=HtmlService.createHtmlOutput(dt).append(Utilities.formatString('<br /><strong>Matches:</strong><br />Guests=%s<br />Confirmation Code=%s<br />Checkout=%s<br />Checkin=%s<br />Payout=%s',guests,cf,chout,chin,payout)).setWidth(1200);
SpreadsheetApp.getUi().showModelessDialog(ui, 'Input Data and Extracted Parameters');
}
这是输出:
我猜你可以弄清楚如何自己完成剩下的工作。我希望这会有所帮助。
答案 1 :(得分:0)
在查看代码并尝试之后,由于您在匹配方法中所做的更改,您将获得null。 num_guests工作的原因是因为它的设置方式是查找单词“Guests”,下一行是数组的结果(注意行末尾的[1])。同样的概念/正则表达式也适用于确认代码部分,但是你输入“\ s”并改变了一些括号的顺序。由于搜索代码是双引号,因此您不需要“\ s”。基本上,当您需要“确认代码”时,您有“确认\ scode”。虽然它适用于regex101,但尝试使用Google Apps脚本环境会产生实际效果。