您的位置:

正则表达式不包含的应用和技巧

一、使用(?!)排除某个字符串

//示例代码:
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 = /<(\/)?[a-z]*>/g; let reg2 = /[^a-zA-Z]+/g; let result = str.replace(reg1, "").replace(reg2, " "); console.log(result); //输出:"Regex is amazing"

正则表达式不包含还可以用于模式拼接,将多个正则表达式拼接起来实现特定的功能。比如,我们想要将HTML标签和标点符号都删除并只保留单词,可以将多个正则表达式拼接起来使用。

在上面的示例中,我们使用两个正则表达式/<(\/*)?[a-z]*>/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]+表示至少一个小写字母组成的单词。