|
| 1 | + |
| 2 | +function pathMatch(pattern: string, path: string) { |
| 3 | + let regStr = '' |
| 4 | + for (let i = 0; i < pattern.length; i++) { |
| 5 | + const ch = pattern[i] |
| 6 | + if ('^$+()[]{}'.includes(ch)) { |
| 7 | + continue |
| 8 | + } |
| 9 | + if (ch === '?') { |
| 10 | + regStr += '[\\S]' |
| 11 | + continue |
| 12 | + } |
| 13 | + if (ch === '*') { |
| 14 | + if (pattern[i + 1] === ch) { |
| 15 | + regStr += `${regStr.at(-1) === '/' ? '?' : '' }[\\S]{0,}` |
| 16 | + i++ |
| 17 | + } else { |
| 18 | + regStr += '[^/]{0,}' |
| 19 | + } |
| 20 | + continue |
| 21 | + } |
| 22 | + if (ch === '.') { |
| 23 | + regStr += '\\' + ch |
| 24 | + continue |
| 25 | + } |
| 26 | + regStr += ch |
| 27 | + } |
| 28 | + return new RegExp(`^${regStr}$`).test(path) |
| 29 | +} |
| 30 | + |
| 31 | +// function assertTrue(value) { console.log(value === true) } |
| 32 | +// function assertFalse(value) { console.log(value === false) } |
| 33 | + |
| 34 | +// assertTrue(pathMatch("/foo/bar/**x{}x[]", "/foo/bar")) ; |
| 35 | + |
| 36 | +// assertTrue(pathMatch("https://jex.im/regulex/", "https://jex.im/regulex/")); |
| 37 | +// assertTrue(pathMatch("com/**/*.jsp", "com/abc.jsp")); |
| 38 | +// assertTrue(pathMatch("com/{ filename: \\w+ }.jsp", "com/abc.jsp2")); |
| 39 | + |
| 40 | +// // test exact matching |
| 41 | +// assertTrue(pathMatch("test", "test")); |
| 42 | +// assertTrue(pathMatch("/test", "/test")); |
| 43 | +// assertTrue(pathMatch("http://example.org", "http://example.org")); // SPR-14141 |
| 44 | +// assertFalse(pathMatch("/test.jpg", "test.jpg")); |
| 45 | +// assertFalse(pathMatch("test", "/test")); |
| 46 | +// assertFalse(pathMatch("/test", "test")); |
| 47 | +// // test matching with ?'s |
| 48 | +// assertTrue(pathMatch("t?st", "test")); |
| 49 | +// assertTrue(pathMatch("??st", "test")); |
| 50 | +// assertTrue(pathMatch("tes?", "test")); |
| 51 | +// assertTrue(pathMatch("te??", "test")); |
| 52 | +// assertTrue(pathMatch("?es?", "test")); |
| 53 | +// assertFalse(pathMatch("tes?", "tes")); |
| 54 | +// assertFalse(pathMatch("tes?", "testt")); |
| 55 | +// assertFalse(pathMatch("tes?", "tsst")); |
| 56 | +// // test matching with *'s |
| 57 | +// assertFalse(pathMatch("*.*", "tsttst")); |
| 58 | +// assertTrue(pathMatch("*", "test")); |
| 59 | +// assertTrue(pathMatch("test*", "test")); |
| 60 | +// assertTrue(pathMatch("test*", "testTest")); |
| 61 | +// assertTrue(pathMatch("test/*", "test/Test")); |
| 62 | +// assertTrue(pathMatch("test/*", "test/t")); |
| 63 | +// assertTrue(pathMatch("test/*", "test/")); |
| 64 | +// assertTrue(pathMatch("*test*", "AnothertestTest")); |
| 65 | +// assertTrue(pathMatch("*test", "Anothertest")); |
| 66 | +// assertTrue(pathMatch("*.*", "test.")); |
| 67 | +// assertTrue(pathMatch("*.*", "test.test")); |
| 68 | +// assertTrue(pathMatch("*.*", "test.test.test")); |
| 69 | +// assertTrue(pathMatch("test*aaa", "testblaaaa")); |
| 70 | +// assertFalse(pathMatch("test*", "tst")); |
| 71 | +// assertFalse(pathMatch("test*", "tsttest")); |
| 72 | +// assertFalse(pathMatch("test*", "test/")); |
| 73 | +// assertFalse(pathMatch("test*", "test/t")); |
| 74 | +// assertFalse(pathMatch("test/*", "test")); |
| 75 | +// assertFalse(pathMatch("*test*", "tsttst")); |
| 76 | +// assertFalse(pathMatch("*test", "tsttst")); |
| 77 | +// assertFalse(pathMatch("test*aaa", "test")); |
| 78 | +// assertFalse(pathMatch("test*aaa", "testblaaab")); |
| 79 | +// // test matching with ?'s and /'s |
| 80 | +// assertTrue(pathMatch("/?", "/a")); |
| 81 | +// assertTrue(pathMatch("/?/a", "/a/a")); |
| 82 | +// assertTrue(pathMatch("/a/?", "/a/b")); |
| 83 | +// assertTrue(pathMatch("/??/a", "/aa/a")); |
| 84 | +// assertTrue(pathMatch("/a/??", "/a/bb")); |
| 85 | +// assertTrue(pathMatch("/?", "/a")); |
| 86 | +// // test matching with **'s |
| 87 | +// assertTrue(pathMatch("/foo/bar/**", "/foo/bar")) ; |
| 88 | +// assertTrue(pathMatch("/**", "/testing/testing")); |
| 89 | +// assertTrue(pathMatch("/*/**", "/testing/testing")); |
| 90 | +// assertTrue(pathMatch("/**/*", "/testing/testing")); |
| 91 | +// assertTrue(pathMatch("/bla/**/bla", "/bla/testing/testing/bla")); |
| 92 | +// assertTrue(pathMatch("/bla/**/bla", "/bla/testing/testing/bla/bla")); |
| 93 | +// assertTrue(pathMatch("/**/test", "/bla/bla/test")); |
| 94 | +// assertTrue(pathMatch("/bla/**/**/bla", "/bla/bla/bla/bla/bla/bla")); |
| 95 | +// assertTrue(pathMatch("/bla*bla/test", "/blaXXXbla/test")); |
| 96 | +// assertTrue(pathMatch("/*bla/test", "/XXXbla/test")); |
| 97 | +// assertFalse(pathMatch("/bla*bla/test", "/blaXXXbl/test")); |
| 98 | +// assertFalse(pathMatch("/*bla/test", "XXXblab/test")); |
| 99 | +// assertFalse(pathMatch("/*bla/test", "XXXbl/test")); |
| 100 | +// assertFalse(pathMatch("/????", "/bala/bla")); |
| 101 | +// assertFalse(pathMatch("/**/*bla", "/bla/bla/bla/bbb")); |
| 102 | +// assertTrue(pathMatch("/*bla*/**/bla/**", "/XXXblaXXXX/testing/testing/bla/testing/testing/")); |
| 103 | +// assertTrue(pathMatch("/*bla*/**/bla/*", "/XXXblaXXXX/testing/testing/bla/testing")); |
| 104 | +// assertTrue(pathMatch("/*bla*/**/bla/**", "/XXXblaXXXX/testing/testing/bla/testing/testing")); |
| 105 | +// assertTrue(pathMatch("/*bla*/**/bla/**", "/XXXblaXXXX/testing/testing/bla/testing/testing.jpg")); |
| 106 | +// assertTrue(pathMatch("*bla*/**/bla/**", "XXXblaXXXX/testing/testing/bla/testing/testing/")); |
| 107 | +// assertTrue(pathMatch("*bla*/**/bla/*", "XXXblaXXXX/testing/testing/bla/testing")); |
| 108 | +// assertTrue(pathMatch("*bla*/**/bla/**", "XXXblaXXXX/testing/testing/bla/testing/testing")); |
| 109 | +// assertFalse(pathMatch("*bla*/**/bla/*", "XXXblaXXXX/testing/testing/bla/testing/testing")); |
| 110 | +// assertFalse(pathMatch("/x/x/**/bla", "/x/x/x/")); |
| 111 | +// assertTrue(pathMatch("", "")); |
| 112 | + |
0 commit comments