首页 文章

Google Scripts与正则表达式匹配

提问于
浏览
1

使用谷歌脚本我试图匹配一个总是这样的字符串部分:* YYYYMMDD; hhmm 例如: 20170701; 0900 *

我定义了这个正则表达式:

var regExp = ('(?:\*)(?P<date>\d+)(?:\;)(?P<time>\d+)(?:\*)','gi');

然后使用以下方法调用它:

var datepart = textbody.match(regExp);

但是我没有得到任何匹配,尽管https://regex101.com/中的相同文本效果很好 . 知道我做错了什么吗?

1 回答

  • 0

    您为PCRE引擎创建了一个正则表达式,而在Google Apps脚本中,您应该使用一个用于JavaScript .

    删除所有已命名的捕获组(JS不支持它们,即 (?P<date>\d+) => (\d+) ),使用正则表达式文字(即 RegExp("pattern", "gi") => /pattern/gi ,但此处不需要 i ,只有在模式中有字母时才使用它),删除全局修饰符以获得与捕获组完整匹配的匹配 .

    var rx = /\*(\d+);(\d+)\*/;
    var datepart = textbody.match(rx); 
    var date, time;
    if (datepart) {
        date = datepart[1];
        time = datepart[2];
    }
    

    请注意 (?:\*) = \* ,因为非捕获组仍然是消耗模式(即它匹配的内容被添加到匹配值) . 由于您希望获得正则表达式的子部分,因此您只需要关注捕获组,即那些 (...) 部分 .

相关问题