广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js正则test匹配的踩坑及解决
  • 869
分享到

js正则test匹配的踩坑及解决

2024-04-02 19:04:59 869人浏览 泡泡鱼
摘要

目录引言这样去匹配,有什么问题吗?为什么是 true 、false 、true ?怎么解决呢?引言 本瓜相信你一定经常用以下这种最最简单的正则来判断字符串中是否存在某个子字符(别说了

引言

本瓜相信你一定经常用以下这种最最简单的正则来判断字符串中是否存在某个子字符(别说了,我就是)?

const pattern = /ab/g
pattern.test("abcd") // true

这样去匹配,有什么问题吗?

不急,现在来让你猜一下,以下代码的输出?

const pattern = /ab/g
console.log(pattern.test("abcd"))
console.log(pattern.test("abcd"))
console.log(pattern.test("abcd"))

“不就是三个 true 吗?!”

在控制台上打印试试?惊不惊喜、意不意外?

image.png

为什么是 true 、false 、true ?

原来这里,这里有个小坑需要注意下,用 test() 连续做匹配的时候,会出错,是因为一个我们将要认识的 —— 正则类型 lastIndex 属性!

lastIndex 属性用于规定下次匹配的起始位置。

每次当我们用正则 RegExp.exec() 和 RegExp.test() 进行匹配的时候,如果返回为 true,lastIndex 属性的值会发生变化,会变成正确匹配的子字符串的最后位置,并将此位置作为下次检索的起始点。如果返回为 false,lastIndex 重置为 0 ;

所以,我们这样打印试试就知道了:

const pattern = /ab/g
console.log(pattern.test("abcd")) // true
console.log(pattern.lastIndex) // 2
console.log(pattern.test("abcd")) // false
console.log(pattern.lastIndex) // 0
console.log(pattern.test("abcd")) // true
console.log(pattern.lastIndex) // 2

当我们第一次调用 pattern.test("abcd")pattern.lastIndex 为 2, 即字母 b 的位置,当再次调用 pattern.test("abcd") 则会从 b 的位置往后搜索,搜不到 ab 了,返回 false ,同时 lastIndex 重置为 0 ,然后第三次调用 pattern.test("abcd") 又能正确返回 true 了,lastIndex 也变成了 2。

不知道这个坑,你踩到过没?

怎么解决呢?

方法一:手动清理 lastIndex

const pattern = /ab/g
console.log(pattern.test("abcd")) // true
pattern.lastIndex = 0
console.log(pattern.test("abcd")) // true

不过,这样手动清理很麻烦,显得很笨,所以建议用方法二。

方法二:用 match 来匹配

const pattern = /ab/g
console.log("abcd".match(pattern)) // ['ab']
console.log("abcdab".match(pattern)) // ['ab', 'ab']
console.log("123".match(pattern)) // null

match 是匹配的更优解,不用手动清理,存在则悉数返回成数组,不存在,返回 null

以上就是正则test匹配的踩坑及解决的详细内容,更多关于正则test匹配坑的资料请关注编程网其它相关文章!

--结束END--

本文标题: js正则test匹配的踩坑及解决

本文链接: https://www.lsjlt.com/news/153846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js正则test匹配的踩坑及解决
    目录引言这样去匹配,有什么问题吗?为什么是 true 、false 、true 怎么解决呢?引言 本瓜相信你一定经常用以下这种最最简单的正则来判断字符串中是否存在某个子字符(别说了,...
    99+
    2022-11-13
  • 一个关于JS正则匹配的踩坑记录
    最近发现在JS里的正则匹配有一个坑,而且当时很莫名奇妙,一度让我怀疑出现了灵异事件。 下面是踩坑代码 var str=["二七1","二七2","金水","二七3","二七...
    99+
    2022-11-12
  • FastJSON字段智能匹配踩坑的解决
    背景 2021年第一天早上,客户突然投诉说系统的一个功能出了问题,紧急排查后发现后端系统确实出了bug,原因为前端传输的JSON报文,后端反序列化成JavaBean后部分字段的值丢失...
    99+
    2022-11-12
  • 全面详解JS正则中匹配技巧及示例
    目录引言组名匹配具名组匹配解构赋值替换前瞻后顾捕获分组补充$&,&n知识点总结引言 在做项目的时候难免会遇到很多奇葩解析字符串的需求,简单的字符串通过内置方法就能解...
    99+
    2023-01-04
    JS正则匹配技巧 JS正则匹配
  • 如何解决js正则匹配多个全部数据问题
    这篇文章给大家分享的是有关如何解决js正则匹配多个全部数据问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。需求:获取所有title里的内容正则表达式后面加g表示多次匹配方式一:...
    99+
    2022-10-19
  • php正则匹配不到的解决方法
    小编给大家分享一下php正则匹配不到的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php正则匹配不到的解决办法:1、使用preg_match_all()...
    99+
    2023-06-15
  • JAVA正则表达式匹配多个空格的解决方案
    目录需求解决方案扩充知识()和[]有本质的区别java中,正则表达式匹配一个或多个空格 && 正则表达式匹配两个或多个空格正则表达式匹配多个空格需求 针对tab键带来...
    99+
    2022-11-16
    java正则表达式匹配空格 正则表达式匹配空格 正则表达式匹配多个空格
  • 如何解决js相同正则多次调用test()返回的值却不同的问题
    这篇文章主要为大家展示了“如何解决js相同正则多次调用test()返回的值却不同的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决js相同正则多次调用...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作