JavaScript正则表达式迷你书之贪婪模式-学习笔记
JavaScript正则表达式迷你书之贪婪模式与非贪婪模式学习笔记
在JavaScript中,正则表达式是一种强大的工具,用于处理字符串和文本数据。贪婪模式与非贪婪模式是正则表达式的两种重要模式,它们决定了正则表达式在匹配字符串时的行为方式。
一、贪婪模式
在正则表达式中,修饰匹配次数的特殊符号如"{m,n}"、"{m,}"、"?"、""和"+"等,都可以使表达式匹配不确定的次数。在这种模式下,匹配次数不确定的表达式会尽可能多地匹配,即尽可能多地“贪婪”地获取字符。这就是所谓的贪婪模式。例如,正则表达式/\d{2,5}/会尽可能多地匹配连续的数字,可能匹配到5位数字。
二、非贪婪模式
与贪婪模式相反,非贪婪模式(也被称为勉强模式)则会尽可能少地匹配字符。在修饰匹配次数的特殊符号后加上一个"?"号,就可以将贪婪模式转换为非贪婪模式。例如,/\d{2,5}?/这个正则表达式在非贪婪模式下,当遇到足够匹配2位数字的情况时,就不会再去尝试匹配更多的数字。
三、横向模糊匹配与纵向模糊匹配
横向模糊匹配指的是一个正则表达式可以匹配的字符串长度不是固定的,可以是多种情况。这可以通过使用量词来实现,如{m,n}表示连续出现最少m次,最多n次。而纵向模糊匹配则是指在一个正则匹配的字符串中,某一位字符可以有多种可能。这可以通过使用字符组来实现,例如[abc]表示该字符可以是字符"a"、"b"、"c"中的任何一个。
四、多选分支
多选分支可以支持多个子模式任选其一。具体形式如(p1|p2|p3),其中p1、p2和p3是子模式,用"|"(管道符)分隔,表示其中任何之一。这种结构使得正则表达式可以匹配多个不同的模式。例如,要匹配字符串"good"和"nice",可以使用正则表达式/good|nice/。这样无论遇到哪个字符串,都能正确匹配并提取出所需的信息。
正则表达式:与理解
在编程中,正则表达式是一种强大的工具,用于处理字符串。让我们深入理解其中的一些关键概念。
让我们看看分支结构。在正则表达式中,“|”符号表示或,可以用来匹配多个可能的字符串。例如,如果我们想匹配 "good" 或 "nice",我们可以使用 /good|nice/g 这个表达式。值得注意的是,正则表达式的分支结构是惰性的,即一旦前面的部分匹配成功,后面的部分就不会再尝试匹配。比如,如果我们用 /good|goodbye/ 去匹配 "goodbye" 字符串,结果只会返回 "good"。
接下来是反向引用。反向引用是一种特殊的匹配方式,它允许我们引用之前已经匹配过的内容。这在处理一些复杂的情况时非常有用。比如,我们想匹配日期,日期的格式可能是 "2020-02-25"、"2020/02/25" 或 "2020.02.25"。我们可以使用 /\d{4}(-|\/|.)\d{2}(-|\/|.)\d{2}/ 这个表达式进行匹配。如果我们想要求分割符前后一致,就需要使用反向引用。在这种情况下,我们可以使用 /\d{4}(-|\/|.)\d{2}\1\d{2}/ 这个表达式,其中的 "\1" 表示引用前面的分组。
还有一个常见的例子是模拟字符串的 trim 方法。这个方法可以删除字符串开头和结尾的空格。我们可以使用正则表达式 str.replace(/^\s+|\s+$/g, '') 来实现这个功能。其中,"^\s+" 表示字符串开头的任意数量的空白字符,"|\s+$" 表示字符串末尾的任意数量的空白字符,"g" 表示全局搜索,即删除所有的匹配项。
十六进制字符的匹配也是正则表达式中的一个重要概念。一个十六进制字符可以是数字或字母,可以用字符组 [0-9a-fA-F] 来表示。如果我们想匹配十六进制字符出现3次或6次的情况,就需要使用量词和分支结构来实现。但是需要注意的是,在使用分支结构时,顺序很重要。
正则表达式是一个强大而复杂的工具,需要仔细理解和运用。通过深入理解这些关键概念,我们可以更高效地处理字符串,提高编程的效率。深入JavaScript正则表达式:贪婪模式与更多学习笔记
在编程世界里,正则表达式(Regex)是一个强大的工具,用于处理字符串和文本数据。JavaScript中的正则表达式具有多种模式和特性,让我们逐一其中的贪婪模式以及其它相关知识点。
让我们看一个例子。假设我们有一组颜色代码,如"ffbbad"、"Fc01DF"等,我们想要匹配这些颜色代码。在这种情况下,我们可以使用如下正则表达式:
```javascript
var regex = /([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
console.log(string.match(regex)); // 输出匹配的颜色代码
```
这个正则表达式能够匹配6位或3位的十六进制颜色代码。其中的“g”标志表示全局搜索,即搜索整个字符串中的所有匹配项。
接下来,让我们贪婪模式。在正则表达式中,大多数重复(区间)匹配都是贪婪的。这意味着它们会尽可能多地匹配输入。例如:
```javascript
var regExp = /8.8/;
var str = "8google8 8google8 8google8";
```
在这个例子中,“8.8”会匹配尽可能多的字符,因为它处于贪婪模式。
除了贪婪模式,还有前瞻模式。前瞻模式是指某个匹配后面必须跟着某个字符串。例如:
```javascript
var regExp = /goo(?=gle)/;
```
在这个例子中,“(?=gle)”表示“goo”后面必须跟着“gle”。这是一种前瞻断言,它不会消耗任何字符,只是进行匹配检查。
还有一个重要的概念是分组。在正则表达式中,我们可以使用括号进行分组。例如:
```javascript
var regExp = /(google)\s(2020)/;
var str = "google 2020";
```
在这个例子中,“(google)”和“(2020)”是捕获性分组,它们会捕获匹配的文本并可以单独引用。返回的数组将包含整个匹配项以及每个分组的匹配项。
还有一种非捕获性分组,例如:
```javascript
var regExp = /(google)\s(?:2020)/;
var str = "google 2020";
```
在这个例子中,“(?:2020)”是非捕获性分组,它不会捕获匹配的文本,只用于分组和模式匹配。
以上是关于JavaScript正则表达式的部分知识点。实际上,正则表达式的世界非常广阔,包含许多高级特性和技巧。对于想要深入学习的人来说,狼蚁SEO的其它相关文章和资料是一个很好的学习资源。希望这些知识点对大家有所帮助,并在实际项目中发挥重要作用。
记得在实际应用中不断练习和参考其他网友的补充资料,以便更好地掌握正则表达式的精髓。以上就是JavaScript正则表达式迷你书之贪婪模式的学习笔记的详细内容,更多关于正则表达式的资料请关注狼蚁SEO的其它相关文章!
网络安全培训
- JavaScript正则表达式迷你书之贪婪模式-学习笔记
- Vue自定义指令拖拽功能示例
- 解决vue组件中使用v-for出现告警问题及v for指令介
- swagger上传文件并支持jwt认证的实现方法
- axios中cookie跨域及相关配置示例详解
- ASP的Global.asa文件技巧用法
- 关于动态执行代码(js的Eval)实例详解
- asp.net如何在图片上加水印文字具体实现
- CI框架简单分页类用法示例
- thinkphp微信开之安全模式消息加密解密不成功的解
- Angular2管道Pipe及自定义管道格式数据用法实例分
- 在vue中添加Echarts图表的基本使用教程
- 详解js中构造流程图的核心技术JsPlumb
- javascript中的 object 和 function小结
- angularjs 缓存的使用详解
- js实现简单实用的AJAX完整实例