一、使用(?!)排除某個字元串
//示例代碼: let str = "I love coding! But I don't like debugging."; let reg = /coding(?!ing)/g; let result = str.replace(reg, "write"); console.log(result); //輸出:"I love write! But I don't like debugging."
正則表達式不包含的最基本用法是使用(?!)語法,在匹配時排除某個字元串。比如,我們想要找到所有「coding」單詞,但不包括「coding」後面的「ing」時,可以這樣寫:coding(?!ing)
。
這裡的(?!
是一個非捕獲組,表示在coding後面不應該跟著ing。這樣我們就可以找到所有「coding」單詞,但不包括「coding」後面的「ing」部分。
二、使用(?=)匹配符合條件的單詞
//示例代碼: let str = "My favorite fruit is apple."; let reg = /\b[a-z]+\b(?= \bapple\b)/g; let result = str.match(reg); console.log(result); //輸出:["favorite"]
與使用(?!)正好相反,我們也可以使用(?=)語法來查找符合特定條件的單詞,比如在一段文本中找到與單詞「apple」組合使用的單詞。
在上面的示例中,我們使用正則表達式\b[a-z]+\b(?= \bapple\b)
,其中(?= \bapple\b)
表示匹配包含「apple」的單詞且該單詞前面的單詞是任意大小寫字母構成的單詞,\b表示單詞邊界,[a-z]+表示至少一個小寫字母組成的單詞。
三、使用模式拼接多個正則表達式
//示例代碼: let str = "Regex is amazing!
"; let reg1 = //g; let reg2 = /[^a-zA-Z]+/g; let result = str.replace(reg1, "").replace(reg2, " "); console.log(result); //輸出:"Regex is amazing"
正則表達式不包含還可以用於模式拼接,將多個正則表達式拼接起來實現特定的功能。比如,我們想要將HTML標籤和標點符號都刪除並只保留單詞,可以將多個正則表達式拼接起來使用。
在上面的示例中,我們使用兩個正則表達式//g
和/[^a-zA-Z]+/g
,將HTML標籤和標點符號刪除,並只留下單詞部分。
四、使用負向預查匹配
//示例代碼: let str1 = "ab1cd2ef3"; let reg1 = /\d+(?=[a-z])/; let result1 = str1.match(reg1); console.log(result1); let str2 = "abcABC123"; let reg2 = /\w+(?!123)/; let result2 = str2.match(reg2); console.log(result2); //輸出:["2"] 和 ["abcABC"]
負向預查匹配是指匹配一個字元,除非這個字元的後面緊跟著指定的模式。在正則表達式中使用(?!...)
即可實現負向預查匹配。
在上面的示例中,/\d+(?=[a-z])
可以匹配數字後面跟著字母的部分,如「2e」;/\w+(?!123)/
則可以匹配除了以「123」結尾的單詞,如「abcABC」。
五、使用(?<=)匹配以某個字元結尾的單詞
//示例代碼: let str = "First one, second, third."; let reg = /(?<=, )\b[a-z]+\b/g; let result = str.match(reg); console.log(result); //輸出:["second", "third"]
與使用(?!)和(?=)正好相反,我們還可以使用(?<=)語法來查找以某個字元結尾的單詞。這裡的(?<=...)
表示匹配前面是…的部分,並在這個部分後面匹配符合條件的單詞。
在上面的示例中,我們使用正則表達式/(?<=, )\b[a-z]+\b/g
,其中(?<=, )
表示匹配以逗號和空格結尾的單詞,\b表示單詞邊界,[a-z]+表示至少一個小寫字母組成的單詞。
原創文章,作者:HPDWB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332469.html