@@ -13,7 +13,23 @@ const imgTagDataUrlImgPat = r`(<img.*?src\s*=\s*")(${dataUrlPat})"[^/]*?\/?>`
13
13
const mkdUrlImgPat = r `(!\[[^]]*\]\()([^) ]+).*?\)`
14
14
const imgTagUrlImgPat = r `(<img\s*.*?src\s*=\s*["'])(.*?)["'][^>]*?>`
15
15
const 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
+ }
17
33
18
34
export function findImgLink ( text : string ) : ImgInfo [ ] {
19
35
const imgTagUrlImgMgs = RsRegex . matches ( imgTagUrlImgPat , text ) as RsMatch [ ]
@@ -24,7 +40,7 @@ export function findImgLink(text: string): ImgInfo[] {
24
40
const byteOffset = mg . byte_offset + Buffer . from ( prefix ) . length
25
41
26
42
let src
27
- if ( / h t t p s ? : \/ \/ / . test ( data ) ) src = ImgSrc . web
43
+ if ( webUrlPrefix . test ( data ) ) src = ImgSrc . web
28
44
else src = ImgSrc . fs
29
45
30
46
return < ImgInfo > {
@@ -48,8 +64,7 @@ export function findImgLink(text: string): ImgInfo[] {
48
64
}
49
65
} )
50
66
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 ) )
55
70
}
0 commit comments