首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 實現類似 SQL LIKE 的模糊匹配判斷

     編輯:程式設計綜合問答

需求場景

判斷字符串 str1 是否包含於 str2 中,類似 SQL LIKE '%str1%'。

方案一:indexOf / includes (ES6+)

function like(str1, str2) {
    // str1 為模式,str2 為目標文本
    return str2.includes(str1);  // 現代瀏覽器推薦
    // 兼容寫法:return str2.indexOf(str1) !== -1;
}

方案二:正則表達式 (支持通配符)

function sqlLike(pattern, text) {
    // 將 SQL LIKE 模式轉為正則:% → .*  _ → .
    const regexPattern = pattern
        .replace(/[%]/g, '.*')
        .replace(/[_]/g, '.');
    const regex = new RegExp('^' + regexPattern + '$');
    return regex.test(text);
}

// 示例
sqlLike('A%B_C', 'AXXXBYC'); // true
sqlLike('user_%', 'user_123'); // true

方案三:第三方庫 (複雜場景)

  • Lodash:_.includes(str, substr)。
  • sqlike 專用庫:npm install sqlike,支持完整 LIKE 語法。

性能對比

方法時間複雜度適用場景
includes/indexOfO(n*m)簡單子串包含判斷,性能最好
正則表達式O(n*m) 視模式需要通配符 % _ 匹配
第三方庫視實現複雜 SQL LIKE 遷移、轉義處理

最佳實踐建議

  • 純子串判斷優先用 includes (ES6) 或 indexOf。
  • 需要 % _ 通配符時,封裝 sqlLike 函數統一處理轉義。
  • 避免在大循環中頻繁創建 RegExp 對象,預編譯緩存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved