当前位置:首页 > 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方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…