使用谷歌脚本我试图匹配总是如下所示的字符串部分: * YYYYMMDD; HHMM * 例如:* 20170701; 0900 *
我定义了这个正则表达式:
var regExp = ('(?:\*)(?P<date>\d+)(?:\;)(?P<time>\d+)(?:\*)','gi');
然后使用:
调用它var datepart = textbody.match(regExp);
但我没有得到任何匹配,尽管https://regex101.com/中的相同文字效果很好。知道我做错了吗?
答案 0 :(得分:3)
您为PCRE引擎创建了一个正则表达式,而在Google Apps脚本中,您应该使用一个用于JavaScript。
删除所有已命名的捕获组(JS不支持它们,即(?P<date>\d+)
=&gt; (\d+)
),使用正则表达式文字(即RegExp("pattern", "gi")
=&gt; {{1} },但此处不需要/pattern/gi
,只有在模式中有字母时才使用它,删除全局修饰符以与捕获组完整匹配。
i
请注意var rx = /\*(\d+);(\d+)\*/;
var datepart = textbody.match(rx);
var date, time;
if (datepart) {
date = datepart[1];
time = datepart[2];
}
= (?:\*)
,因为非捕获组仍然是消费模式(即它匹配的内容会添加到匹配值)。由于您希望获得正则表达式的子部分,因此您只需要关注捕获组,即\*
部分。