@@ -13,7 +13,23 @@ const imgTagDataUrlImgPat = r`(<img.*?src\s*=\s*")(${dataUrlPat})"[^/]*?\/?>`
1313const mkdUrlImgPat = r `(!\[[^]]*\]\()([^)]+)\)`
1414const imgTagUrlImgPat = r `(<img\s*.*?src\s*=\s*["'])(.*?)["'][^>]*?>`
1515const mkdDataUrlImgPat = r `(!\[.*?]\()(${ dataUrlPat } )\)`
16- const cnbDomain = r `\.cnblogs\.com\/`
16+ const wikilinkImages = / ! \[ ( \[ .+ ?\] ) \] [ \s \S ] + ?(?< prefix > \1: \s * ) (?< uri > .* ?) \s + / g
17+ const exludeDomains = / \. c n b l o g s \. c o m / i
18+ const webUrlPrefix = / ^ h t t p s ? : \/ \/ / i
19+
20+ export const FILTER_BYTE_OFFSET = - 9999
21+
22+ function getImagesWithTs ( text : string ) {
23+ return [ ...text . matchAll ( wikilinkImages ) ] . map ( m => {
24+ const uri = m . groups ?. uri ?? ''
25+ return < ImgInfo > {
26+ byteOffset : FILTER_BYTE_OFFSET ,
27+ data : uri ,
28+ src : webUrlPrefix . test ( uri ) ? ImgSrc . web : ImgSrc . fs ,
29+ prefix : m . groups ?. prefix ,
30+ }
31+ } )
32+ }
1733
1834export function findImgLink ( text : string ) : ImgInfo [ ] {
1935 const imgTagUrlImgMgs = RsRegex . matches ( imgTagUrlImgPat , text ) as RsMatch [ ]
@@ -24,7 +40,7 @@ export function findImgLink(text: string): ImgInfo[] {
2440 const byteOffset = mg . byte_offset + Buffer . from ( prefix ) . length
2541
2642 let src
27- if ( / h t t p s ? : \/ \/ / . test ( data ) ) src = ImgSrc . web
43+ if ( webUrlPrefix . test ( data ) ) src = ImgSrc . web
2844 else src = ImgSrc . fs
2945
3046 return < ImgInfo > {
@@ -48,8 +64,7 @@ export function findImgLink(text: string): ImgInfo[] {
4864 }
4965 } )
5066
51- const acc = urlImgInfo . concat ( dataUrlImgInfo )
52-
53- // keep links while not cnb
54- return acc . filter ( x => ! RsRegex . isMatch ( cnbDomain , x . data . toLowerCase ( ) ) )
67+ let images = urlImgInfo . concat ( dataUrlImgInfo )
68+ images = images . concat ( getImagesWithTs ( text ) )
69+ return images . filter ( x => ! exludeDomains . test ( x . data ) )
5570}
0 commit comments