讀書的時候看到同學借了一本書在看,大約有三四厘米那么厚,名字就叫正則表達式。
正則表達式(Regular Expressions, 簡稱 regex 或 regexp)是一種強大的文本處理工具,用于字符串的模式匹配。它們可以用來搜索、編輯或操作文本。
比如JavaScript 支持正則表達式,并且在很多地方都可以看到它的應用,比如表單驗證、數據清洗等。
初級用法
基本匹配
最基本的用法是查找字符串中是否包含某個模式。例如,檢查一個字符串中是否包含字母 "a":
const string = "apple";
const regex = /a/;
console.log(regex.test(string)); // 輸出: true
字符類
字符類可以匹配一組字符中的任何一個。例如,匹配任何數字:
const string = "The price is 100 dollars.";
const regex = /\d/; // \d 匹配任何數字
console.log(string.match(regex)); // 輸出: ["1"]
中級用法
量詞
量詞定義了匹配模式出現的次數。例如,匹配至少兩個連續的數字:
const string = "There are Ⅱ people here.";
const regex = /\d{2}/; // {2} 表示前面的元素恰好出現兩次
console.log(string.match(regex)); // 輸出: null (因為沒有兩個連續的數字)
分組和捕獲
分組允許將多個元素當作一個單元來處理,并且可以通過捕獲引用這些組。例如,交換名字和姓氏:
const fullName = "John Doe";
const regex = /(\w+)\s+(\w+)/;
const swappedName = fullName.replace(regex, '$2, $1'); // $1 和 $2 是捕獲組
console.log(swappedName); // 輸出: "Doe, John"
高級用法
回調函數
在替換操作中,可以使用回調函數來進行更復雜的邏輯處理。例如,將所有的美元金額轉換成歐元(假設匯率為1 USD = 0.9 EUR):
const text = "The price is $100 and the discount is $20.";
const regex = /\$\d+/g;
const convertedText = text.replace(regex, (match) => {
const amount = parseInt(match.slice(1), 10);
return `€${(amount * 0.9).toFixed(2)}`;
});
console.log(convertedText); // 輸出: "The price is €90.00 and the discount is €18.00."
斷言
斷言(Lookahead 和 Lookbehind)允許匹配某些模式,但不消耗字符串中的字符。例如,僅匹配單詞 "cat",但不匹配 "catch" 或 "category":
const string = "I have a cat, but not a category or catch.";
const regex = /\bcat\b(?![a-z])/; // \b 是單詞邊界,(?![a-z]) 是負向前瞻斷言
console.log(string.match(regex)); // 輸出: ["cat"]
通過這些例子,我們可以看到正則表達式的強大之處在于其靈活性和廣泛的應用場景。從簡單的文本匹配到復雜的文本處理任務,正則表達式都能夠勝任。不過,隨著復雜性的增加,正則表達式的可讀性和維護性可能會下降,因此在編寫復雜的正則表達式時需要格外小心。
該文章在 2024/12/5 15:59:39 編輯過