[英]Regex to Select only Pattern Match Files
ftp服務器每天都會創建以下文件。
因此,基本上有兩種文件類型
每個文件類型的三個報告代碼
我需要忽略其余文件。 (SSD文件)。
我需要在Javascript中編寫正則表達式模式來獲取這些文件。 具有以下變量。
因此,如果fileDate = 2016_04_15且matchReportCode ='SV' (BS,BV)。 然后,我應該只提取以下文件。
因此,如果fileDate = 2016_04_19且matchReportCode ='3S' (B3,BS)。 然后,我應該只提取以下文件。
到目前為止,我只能提出這個建議。
FileRegex = "F[KG]I_.*_D_" + fileDate + "_[A-z]{0,3}L{0,1}[" + matchReportCode + "]{0,1}.daily.gzip";
有人可以幫忙嗎? 我是正則表達式的新手。 謝謝。
以下內容可能會更好一些:
FileRegex = "F[KG]I_[^_]+_D_" + fileDate + "_(?!SSD)[a-zA-Z]{0,3}((B[" + matchReportCode + "])|(?<^FKI.*)).daily.gzip";
這將匹配具有所選fileDate的FKI和FGI文件名,並在所選reportCode之前最多三個字母。
其他更改包括將[Az]
更改為[a-zA-Z]
,這是因為正則表達式字符類范圍表達式使用了ascii表示,並且A和z之間有不是字母的字符([-等。這似乎是您的意圖)。
此外, .*_
成為[^_]+_
,這要求在下划線之外至少還有一個字符,防止引擎不得不回溯盡可能多的字符,並且如果添加另一個段則使正則表達式更易於編輯。
在最后一個段的開頭,我還添加了一個負前瞻(?!SSD)
,這要求該段不以SSD開頭。
末尾的((B[" + matchReportCode + "])|(?<^FKI.*))
或)條件((B[" + matchReportCode + "])|(?<^FKI.*))
要求文件與報告代碼匹配,或者文件名以FKI開頭(后跟任意數字)字符返回末尾)。 在字符類( [...]
)之外使用時, ^
是行錨的起點。
您可以使用負前瞻 :
var fileDate = '2016_04_19';
var matchReportCode = 'BS';
var re = new RegExp('F[KG]I_\\w+_D_' + fileDate +
'_(?!SSD)[\\w\\d]*' + matchReportCode + '?\\.daily\\.gzip');
// re.test('FKI_GHJK_D_2016_04_19_SSDBS.daily.gzip') === false
// re.test('FKI_GHJK_D_2016_04_19_SATBS.daily.gzip') === true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.