当前位置:首页 > JavaScript

js实现通配符

2026-02-02 08:52:35JavaScript

通配符匹配的实现方法

在JavaScript中实现通配符匹配通常涉及字符串模式匹配,常见需求包括*(匹配任意数量字符)和?(匹配单个字符)的功能。以下是几种实现方式:

使用正则表达式转换

将通配符模式转换为正则表达式是最直接的方法:

function wildcardToRegex(pattern) {
    const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
    const regexStr = escaped.replace(/\*/g,'.*').replace(/\?/g,'.');
    return new RegExp(`^${regexStr}$`, 'i');
}

// 示例用法
const regex = wildcardToRegex("file*.txt");
regex.test("file123.txt"); // true

递归匹配算法

对于更复杂的场景,可采用递归方式逐字符匹配:

function isMatch(str, pattern) {
    let strIndex = 0, patternIndex = 0;
    while (patternIndex < pattern.length) {
        const pChar = pattern[patternIndex];
        if (pChar === '*') {
            while (pattern[patternIndex + 1] === '*') {
                patternIndex++;
            }
            return isMatch(str.slice(strIndex), pattern.slice(patternIndex + 1)) 
                   || (strIndex < str.length && isMatch(str.slice(strIndex + 1), pattern.slice(patternIndex)));
        }
        if (strIndex >= str.length) return false;
        if (pChar !== '?' && pChar !== str[strIndex]) return false;
        strIndex++;
        patternIndex++;
    }
    return strIndex === str.length;
}

动态规划优化

对于性能要求高的场景,可以使用动态规划:

function wildcardDP(str, pattern) {
    const dp = Array(str.length + 1).fill().map(() => 
        Array(pattern.length + 1).fill(false));
    dp[0][0] = true;

    for (let j = 1; j <= pattern.length; j++) {
        if (pattern[j-1] === '*') dp[0][j] = dp[0][j-1];
    }

    for (let i = 1; i <= str.length; i++) {
        for (let j = 1; j <= pattern.length; j++) {
            if (pattern[j-1] === '*') {
                dp[i][j] = dp[i][j-1] || dp[i-1][j];
            } else {
                dp[i][j] = dp[i-1][j-1] && 
                    (pattern[j-1] === '?' || str[i-1] === pattern[j-1]);
            }
        }
    }
    return dp[str.length][pattern.length];
}

实际应用场景

  • 文件系统路径匹配
  • 搜索引擎的简单查询语法
  • 表单输入验证中的模糊匹配

注意事项:

  • 性能敏感场景建议使用动态规划方案
  • 正则表达式方案需注意特殊字符转义
  • 递归方案在极端情况下可能出现栈溢出

js实现通配符

标签: 通配符js
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…