当前位置:首页 > JavaScript

js实现路由match

2026-03-16 06:59:57JavaScript

js实现路由匹配的方法

基于字符串路径的简单匹配

使用字符串比较或正则表达式实现基础路由匹配,适合简单场景。

const routes = {
  '/home': 'Home Page',
  '/about': 'About Page'
};

function matchRoute(path) {
  return routes[path] || '404 Not Found';
}

动态参数路由匹配

通过正则表达式提取路径中的动态参数,实现灵活的路由匹配。

const dynamicRoutes = [
  { pattern: /^\/user\/(\w+)$/, handler: (id) => `User ${id}` },
  { pattern: /^\/post\/(\d+)$/, handler: (id) => `Post ${id}` }
];

function matchDynamicRoute(path) {
  for (const route of dynamicRoutes) {
    const match = path.match(route.pattern);
    if (match) return route.handler(match[1]);
  }
  return '404 Not Found';
}

路由前缀匹配

处理嵌套路由或路由前缀时,使用字符串的startsWith方法或正则表达式。

js实现路由match

const prefixRoutes = [
  { prefix: '/admin', handler: 'Admin Area' },
  { prefix: '/api', handler: 'API Endpoint' }
];

function matchPrefixRoute(path) {
  const route = prefixRoutes.find(r => path.startsWith(r.prefix));
  return route ? route.handler : '404 Not Found';
}

通配符路由匹配

实现类似*的通配符匹配,处理未定义的路由或兜底逻辑。

const wildcardRoutes = {
  '/dashboard/*': 'Dashboard Subroute',
  '/*': 'Fallback Page'
};

function matchWildcardRoute(path) {
  for (const [pattern, handler] of Object.entries(wildcardRoutes)) {
    const regex = new RegExp('^' + pattern.replace('*', '.*') + '$');
    if (regex.test(path)) return handler;
  }
  return '404 Not Found';
}

使用URL对象解析

利用浏览器内置的URL API进行更精确的路由解析和参数提取。

js实现路由match

function matchURLRoute(urlString) {
  const url = new URL(urlString, window.location.origin);
  const path = url.pathname;
  const params = Object.fromEntries(url.searchParams.entries());

  if (path === '/search') return `Search for: ${params.q}`;
  return '404 Not Found';
}

路由优先级处理

当存在多个匹配路由时,通过优先级排序确定最终匹配结果。

const priorityRoutes = [
  { path: '/user/exact', priority: 2, handler: 'Exact User' },
  { path: '/user/*', priority: 1, handler: 'Generic User' }
];

function matchPriorityRoute(path) {
  const matched = priorityRoutes.filter(r => 
    new RegExp('^' + r.path.replace('*', '.*') + '$').test(path)
  ).sort((a, b) => b.priority - a.priority);

  return matched[0]?.handler || '404 Not Found';
}

哈希路由实现

针对单页应用的哈希路由方案,监听hashchange事件进行路由匹配。

window.addEventListener('hashchange', () => {
  const hash = window.location.hash.slice(1) || '/';
  const handler = matchRoute(hash); // 使用前述任一匹配方法
  renderContent(handler);
});

路由参数对象化

将匹配的路由参数封装为对象,便于后续处理和使用。

function matchParams(path) {
  const paramPattern = /\/:(\w+)/g;
  const pathPattern = path.replace(paramPattern, '/(\\w+)');
  return {
    regex: new RegExp(`^${pathPattern}$`),
    keys: [...path.matchAll(paramPattern)].map(m => m[1])
  };
}

function parseParams(path, {regex, keys}) {
  const match = path.match(regex);
  if (!match) return null;
  return keys.reduce((params, key, i) => {
    params[key] = match[i+1];
    return params;
  }, {});
}

标签: 路由js
分享给朋友:

相关文章

vue实现动态路由按钮

vue实现动态路由按钮

Vue 实现动态路由按钮的方法 动态路由按钮的实现通常涉及权限控制,根据用户角色或权限动态显示或隐藏路由按钮。以下是几种常见方法: 基于路由元信息(meta)和v-if控制 在路由配置中添加权限标识…

vue实现点击跳转路由

vue实现点击跳转路由

vue实现点击跳转路由的方法 在Vue中实现点击跳转路由,可以通过以下几种方式完成,具体取决于项目使用的路由管理工具(如Vue Router)以及需求场景。 使用router-link组件 rout…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

react路由如何刷新

react路由如何刷新

React 路由刷新方法 在 React 中,路由刷新通常涉及以下几种场景和解决方案: 强制重新加载当前页面 使用 window.location.reload() 可以强制刷新整个页面,但会丢失…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

vue实现路由跳转

vue实现路由跳转

路由跳转的基本方法 在Vue中,路由跳转可以通过vue-router实现。vue-router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的路由跳转方式。 声明式导航…