正则表达式:快速精准的字符串匹配宝典
前言
本菜鸡在刷算法的时候发现正则在处理字符串的时候真的不要太重要,所有我就想着通过一篇文章来总结一下关于正则的知识点,希望也能够给对正则不太了解的小伙伴们带来一点帮助,那就和我一起往下看吧~
正文
基本字符
就是可以直接匹配对应的字符,如a
、b
等。
代码:
let str = 'Hello World';
let regex = /World/;
let result = regex.test(str); console.log(result); // 输出:true
分析:
- 创建了一个正则表达式
/World/
,用于查找字符串'Hello World'
中的"World"; test()
方法返回一个布尔值,表示是否找到了匹配项;- 结果为
true
,因为"World"确实存在于字符串中。
元字符
.
:匹配任何单个字符(除了换行符);^
:表示字符串的开始;$
:表示字符串的结束;*
:表示前面的字符可以出现0次或多次;+
:表示前面的字符至少出现1次;?
:表示前面的字符可以出现0次或1次;{n}
:表示前面的字符正好出现n次;{n,}
:表示前面的字符至少出现n次;{n,m}
:表示前面的字符至少出现n次,但不超过m次;[]
:表示匹配括号内的任何一个字符;|
:表示或的关系,如a|b
将匹配"a"或"b"。
代码:
let str = 'Hello 123';
let regex = /\d+/;
let result = str.match(regex); console.log(result); // 输出:['123']
分析:
- 创建了一个正则表达式
/\d+/
,其中\d
是一个预定义的字符类,代表任何数字; +
表示前面的元素应该出现一次或多次;- 这个正则表达式会匹配一个或多个连续的数字。
match()
方法返回第一个匹配项,或者如果没有找到匹配项,则返回null
转义字符
如果想匹配一些特殊字符,如.
、*
、+
等,需要在它们前面加上\
进行转义。
字符集
[abc]
:匹配"a"、"b"或"c";[a-z]
:匹配任何小写字母;[A-Z]
:匹配任何大写字母;[0-9]
:匹配任何数字;[a-zA-Z0-9]
:匹配任何字母或数字;[^a-zA-Z]
:匹配不是字母的任何字符。
预定义字符集
\d
:匹配任何数字,相当于[0-9]
;\D
:匹配任何非数字字符;\s
:匹配任何空白字符,包括空格、制表符、换页符等;\S
:匹配任何非空白字符;\w
:匹配任何字母或数字或下划线;\W
:匹配任何非字母、非数字和非下划线的字符。
边界符
\b
:单词边界;\B
:非单词边界。
分组和引用
- 使用
()
来创建一个分组 - 使用
\1
、\2
等来引用前面的分组
模式修饰符
g
:全局匹配,查找整个字符串,而不仅限于首次出现。i
:不区分大小写。m
:多行模式,使^
和$
能够匹配每行的开始和结束
零宽断言
(?=...)
:正向前瞻,匹配后面跟着...的位置。(?!...)
:负向前瞻,匹配后面不跟...的位置。(?<=...)
:正向后瞻,匹配前面有...的位置。(?<!...)
:负向后瞻,匹配前面没有...的位置。
应用场景
以上就是关于正则的一些知识点啦,当然只知道怎么用不去用也没啥收获啦,毕竟学以致用啦~
在JavScript中。正则表达式通常被封装为一个对象,然后结合test、match、replace等方法来实现测试,提取和替换的操作。
代码展示:
测试的字符串:
// 定义测试字符串
const str = "Hello World!";
匹配单个字符
// 匹配任何单个字符
const regexDot = /./g;
console.log(str.match(regexDot)); // ["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "!"]
匹配字符串的开始位置
// 匹配字符串的开始位置
const regexStart = /^H/;
console.log(regexStart.test(str)); // true
匹配字符串的结束位置
// 匹配字符串的结束位置
const regexEnd = /!$/;
console.log(regexEnd.test(str)); // true
匹配单词边界
// 匹配单词边界
const regexWordBoundary = /\bWorld\b/;
console.log(regexWordBoundary.test(str)); // true
重复量词示例
// 重复量词示例
const strRepeats = "aaabbbccc";
const regexAStar = /a*/;
console.log(strRepeats.match(regexAStar)); // ["aaa"]
const regexBPlus = /b+/;
console.log(strRepeats.match(regexBPlus)); // ["bbb"]
const regexCQuestion = /c?/;
console.log(strRepeats.match(regexCQuestion)); // ["c"]
选择和组合示例
// 选择和组合
const strOr = "Hello or Goodbye!";
const regexOr = /Hello|Goodbye/g;
console.log(strOr.match(regexOr)); // ["Hello", "Goodbye"]
分组和捕获示例
// 分组和捕获
const strGroup = "John Doe";
const regexGroup = /(\w+) (\w+)/;
const matchGroup = regexGroup.exec(strGroup);
console.log(matchGroup); // ["John Doe", "John", "Doe"]
字符集示例
// 字符集
const strCharSet = "Hello123";
const regexLetter = /[a-z]/i;
console.log(strCharSet.match(regexLetter)); // ["H"]
const regexDigit = /[0-9]/;
console.log(strCharSet.match(regexDigit)); // ["1"]
const regexNotLetter = /[^a-z]/i;
console.log(strCharSet.match(regexNotLetter)); // ["1", "2", "3", " "]
预定义字符类示例
// 预定义字符类
const regexDigitPredefined = /\d/g;
console.log(strCharSet.match(regexDigitPredefined)); // ["1", "2", "3"]
const regexNotDigitPredefined = /\D/g;
console.log(strCharSet.match(regexNotDigitPredefined)); // ["H", "e", "l", "l", "o"]
const regexWordPredefined = /\w/g;
console.log(strCharSet.match(regexWordPredefined)); // ["H", "e", "l", "l", "o", "1", "2", "3"]
const regexNotWordPredefined = /\W/g;
console.log(strCharSet.match(regexNotWordPredefined)); // [" "]
const regexSpacePredefined = /\s/g;
console.log(strCharSet.match(regexSpacePredefined)); // [" "]
转义字符示例
// 转义字符
const strEscape = "Hello. World!";
const regexPeriod = /\./;
console.log(strEscape.match(regexPeriod)); // ["."]
贪婪与懒惰示例
// 贪婪与懒惰
const strGreedyLazy = "aaaaabbb";
const regexGreedy = /a*/;
console.log(strGreedyLazy.match(regexGreedy)); // ["aaaaa"]
const regexLazy = /a*?/;
console.log(strGreedyLazy.match(regexLazy)); // ["a"]
结语
快get正则的知识点和用法,去猛猛一顿刷算法~
转载自:https://juejin.cn/post/7390319475520421940