当前位置:首页 > 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方法或正则表达式。

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进行更精确的路由解析和参数提取。

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);
});

路由参数对象化

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

js实现路由match

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 实现路由历史管理 在 Vue 中,路由历史管理通常通过 Vue Router 实现。Vue Router 提供了两种历史记录模式:hash 模式和 history 模式。以下是具体实现方法。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现自举

js实现自举

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…