search命令忽略特殊字符

时间:2017-07-11 14:05:07

标签: javascript google-apps-script special-characters

我正在尝试做什么:如果在事件“#notes”的标题或说明中找到以下字符串,我正在尝试解析Google日历事件并创建Google文档

实际发生的事情:一旦找到字符串“notes”,就会创建一个文档。它不需要标签。 @发生同样的事情。

function createMeetingNotesNextTimePeriod() { 

  //<-------------------------------------VARIABLES

  // get today's date
  var today = new Date();

  // number of hours from now to check for meetings
  var hours = 2

  // create variable for now
  var now = new Date();

  // create variable for number of hours from now in milliseconds
  var period_from_now = new Date(now.getTime() + (hours * 60 * 60 * 1000));

  // retrieve all calendar events for time period with @notes string
  var tagword = ('#notes');
  var events = CalendarApp.getDefaultCalendar().getEvents(now, period_from_now, {search: tagword}) ;
  Logger.log('Number of events: ' + events.length);

}  // functionCreateMeetingNotesNextTimePeriod

log命令告诉我它发现了一个事件,但是有问题的事件在它的标题中没有'notes',没有#标签。感谢您的帮助。

修改 我想我发现了问题,但我仍然难以解决问题。似乎.getEvents中的搜索选项会忽略大多数特殊字符,并在您搜索特殊字符时返回正数。例如,我用以下内容替换了原始搜索标记:

var events = CalendarApp.getDefaultCalendar().getEvents(now, period_from_now, {search: 'notes' + '@' +'#' + '±' }) ;

在我的搜索中,它给了我一个积极的匹配,而我的事件中没有'@','#'或'±'。

2 个答案:

答案 0 :(得分:2)

它似乎很奇怪,它忽略了特殊字符,但是这是一个可行的解决方法:

  var tagword = '#notes';
  var events = CalendarApp.getDefaultCalendar().getEvents(now, period_from_now, {search : tagword})
  if (events.length > 0) {
    for (i in events) {
      if ( events[i].getTitle().indexOf(tagword) >-1 || events[i].getDescription().indexOf(tagword) >-1) {
        //do something
      }
      }
  }

基本上它会找到所有带有音符的事件(忽略特殊字符)然后遍历事件标题和描述以检查标记字是否存在(包括特殊字符)。

答案 1 :(得分:0)

您需要使用一些正则表达式来执行您在Javascript中尝试执行的操作。

我不确定如何针对您的具体案例进行此操作,但这里有两个可以帮助您的参考资料。

JS Extract HashTags From Text

JS Regex Searching for HashTags

我希望这有帮助!

修改

var tagword = ('/#/g' + notes);
OR
var tagword = ('/#notes/g');

我试了一下它似乎有效。