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

JavaScript 正則判斷字符串包含關係:括號轉義與 indexOf 陷阱全解析

     編輯:程式設計疑難解答

問題代碼

var str = "中央綜藝頻道(3)(高清),中國教育頻道(2)";
var sear = new RegExp('中央綜藝頻道(3)(高清)');
var test1 = '中央綜藝頻道(3)(高清)';

if (test1.indexOf(str) > 0) { alert("yes"); } else { alert("no"); }  // 輸出 no
if (sear.test(str)) { alert('Yes'); } else { alert('no'); }         // 輸出 no

兩大錯誤

  1. indexOf 參數反了:test1.indexOf(str) 是在「短字符串」中找「長字符串」,永遠返回 -1。應為 str.indexOf(test1);
  2. 正則未轉義括號:() 是正則分組元字符,需雙重轉義:\\(3\\)\\(高清\\)。

修正代碼

var str = "中央綜藝頻道(3)(高清),中國教育頻道(2)";
var target = "中央綜藝頻道(3)(高清)";

// 方法 1:indexOf(最簡單、效能最好)
if (str.indexOf(target) !== -1) { console.log("yes"); }

// 方法 2:正則(需動態構建時使用)
var regex = new RegExp(target.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); // 全局轉義
if (regex.test(str)) { console.log("yes"); }

// 方法 3:ES6 includes(語義最清晰)
if (str.includes(target)) { console.log("yes"); }

最佳實踐建議

  • 固定字符串匹配:優先用 includes / indexOf,無正則開銷;
  • 動態正則:使用 String.prototype.replace 配合元字符轉義正則 /[.*+?^${}()|[\]\\]/g 自動轉義;
  • 大小寫不敏感:new RegExp(escaped, 'i');
  • 邊界匹配:需整詞匹配時用 \\b 或 ^...$。

總結

「括號是正則關鍵字,要轉義」是核心;但更根本的是**選對工具**:固定子串查找用 includes,動態模式才用正則,並做好自動轉義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved