mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-05-08 12:10:13 +08:00
27 lines
840 B
TypeScript
27 lines
840 B
TypeScript
import escapeStringRegexp from 'escape-string-regexp';
|
|
|
|
export default function extractPathFromURL(prefixes: string[], url: string) {
|
|
for (const prefix of prefixes) {
|
|
const protocol = prefix.match(/^[^:]+:/)?.[0] ?? '';
|
|
const host = prefix
|
|
.replace(new RegExp(`^${escapeStringRegexp(protocol)}`), '')
|
|
.replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
|
|
.replace(/^\//, ''); // Remove extra leading slash
|
|
|
|
const prefixRegex = new RegExp(
|
|
`^${escapeStringRegexp(protocol)}(/)*${host
|
|
.split('.')
|
|
.map((it) => (it === '*' ? '[^/]+' : escapeStringRegexp(it)))
|
|
.join('\\.')}`
|
|
);
|
|
|
|
const normalizedURL = url.replace(/\/+/g, '/');
|
|
|
|
if (prefixRegex.test(normalizedURL)) {
|
|
return normalizedURL.replace(prefixRegex, '');
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|