2017-07-16 57 views
1

使用谷歌的腳本我想爲一個字符串的一部分總是看起來像這樣搭配: *年月日; HHMM * 例如:* 20170701; 0900 *谷歌腳本匹配的正則表達式

我定義這個正則表達式:

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

然後調用它使用:

var datepart = textbody.match(regExp); 

但是我沒有得到任何的比賽,雖然在https://regex101.com/相同的文字 效果很好。任何想法我做錯了什麼?

+1

你能告訴我們你在實際嘗試匹配的原始上下文嗎? –

+0

謝謝蒂姆。我有一個谷歌腳本功能,旨在輸出我手動輸入的日期標記,以便在稍後階段起草一條消息。正則表達式掃描的元素是一個字符串:var textbody = Utilities.newBlob(part.body.data).getDataAsString();該字符串包含格式爲\ * 20170710; 0900 \ *的自定義時間戳,後跟郵件的實際文本正文。我想提取時間戳,將其存儲爲變量,並用空白替換,以便發送的電子郵件不包含時間戳。 – nubie

+0

您爲PCRE引擎創建了一個正則表達式,而在Google Apps腳本中,您應該使用一個用於JavaScript的文本 –

回答

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]; 
} 

注意(?:\*) = \*因爲非捕獲組仍然是一個耗時圖案(即它所匹配被添加到匹配值)。既然你想獲得正則表達式的子部分,你只需要關注捕獲組,那些(...)部分。

+0

謝謝Wiktor完美運行! – nubie