🎯 在 JavaScript 中使用正则表达式
我们都同意,正则表达式很难。但与此同时,它的使用也是不可避免的。正则表达式的核心目的是匹配模式。我们不需要每次匹配模式时都输入相同的信息。
🤔 例如,有时我们只需要知道它是否存在—— atrue或false,有时我们需要index,等等。这就是为什么 JavaScript 中存在不同的方法可以与正则表达式配合使用并获取特定信息。
本文主要介绍这些用例以及正确的使用方法。
对于初学者来说,这可能会令人困惑。请尽量消化一下,需要的时候可以随时回来阅读这篇文章。一篇文章很难涵盖所有概念。欢迎在下方评论区提问或讨论。
1️⃣ 仅获取第一次出现的索引
String.prototype.search()在这种情况下才是正确的做法。
🚨记住
- 如果未找到则返回 -1。
- -1 与 不同false。请勿在if块中使用它。
- 无论正则表达式上的全局标志如何g,它都会给出相同的结果。
 2️⃣ 获取 A True/False— 存在与否
RegExp.prototype.test()true/false根据是否找到模式返回。
🚨记住
- 返回类型是bool。
- 结果可直接在if块内使用。
- 当使用全局标志时g,它可以为下一次出现执行多次。即,true只要它不断找到模式的下一次出现,它就会不断返回。
🚩 全局标志说明
你注意到正则表达式了吗/foo/g?它的意思是:
- 逐字匹配foo。
- 'g' 表示第一次匹配后不返回。查找所有匹配项。
在代码中,它返回了true两次。第一次,它foo在 中找到football;第二次,在 中找到foosball。第三次,它返回 false,并且会一直返回 false。
- RegExp.prototype.test()通过维护名为的属性来实现这一点- lastIndex。
- 每次运行时它都会更新。
- 当返回所有出现的情况时,它被设置为0。
- lastIndex通常 是 最后 一次- index of occurrence + 1.
让我们重新审视一下上面的代码lastIndex。
2️⃣ 仅获取所有匹配的模式
String.prototype.match()为您提供正则表达式指定的模式的所有匹配/出现的数组。
🚨记住
- g仅当指定全局标志时,您才会在响应中获得一个数组。
- 如果正则表达式中未指定全局标志g,则结果会有所不同。我们将在本文后面介绍。
3️⃣ 获取唯一第一个匹配的模式和起始索引
String.prototype.match()还可以为您提供唯一的第一个匹配模式及其出现的起始索引。
🚨记住
- g仅当正则表达式中未指定全局标志时,您才会获得这些详细信息。
- 返回一个对象,其中包含匹配模式、索引和输入字符串等信息。
- 它对于标记化非常有帮助。
请注意,您也可以将
RegExp.prototype.exec()其用于此目的。下文将对此进行解释。
4️⃣ 获取所有匹配的模式及其起始索引
在这种情况下,您有两种选择:
- RegExp.prototype.exec()
- String.prototype.matchAll()
两者解释如下:
  RegExp.prototype.exec()
g如果您打算以这种方式使用,请不要忘记设置全局标志。如果省略,它的行为将与 相同,并且每次String.prototype.match()都会给出相同的结果和(0)。lastIndex
🚨记住
- 您必须每次都执行它才能获得下一次发生的详细信息。
- 与 类似RegExp.prototype.test(),它也是有状态的。
- lastIndex每次运行时它都会更新。
- 完成后,lastIndex设置为 0,结果为null。
如果您使用
while类似本例的循环,请不要忘记g标志。
  String.prototype.matchAll()
我们使用 获得的结果RegExp.prototype.exec()也可以使用 获得,但使用循环String.prototype.matchAll()更方便。for-of
🚨记住
- 如果你的正则表达式中没有全局标志,它就不起作用g。
- Iterable执行此命令时,您会得到一个。
- 这个想法是,你编写一个简单的for-of循环,它会处理剩下的事情。
如果您熟悉 JavaScript 中的生成器和迭代器,您也可以获取迭代器并
.next()根据您的用例使用。
.next()返回一个具有value和done属性的对象。done直到遍历完整个列表,属性才会返回 false。
🙌 总结
这就是我在 JavaScript 中使用正则表达式时所考虑的全部内容——一些用例以及应该使用的方法。下次你在 JavaScript 中使用正则表达式时,这些内容可能会有所帮助。
不过,我非常想知道你是如何在 JavaScript 中处理正则表达式的?欢迎在下面的评论区分享你的用例/方法。
有了 Daily,开发者可以专注于代码,无需搜索新闻。只需打开新标签页,即可立即访问所有这些文章及更多内容。
鏂囩珷鏉ユ簮锛�https://dev.to/dailydotdev/using-regular-expressions-in-javascript-4452 后端开发教程 - Java、Spring Boot 实战 - msg200.com
            后端开发教程 - Java、Spring Boot 实战 - msg200.com
          







