风君子博客

  • 首页
  • 业界
  • 前端
  • 运维
  • 建站
  • 软件
  • 生活
  • 后端
  • 创投
  • 运营
  • 程序人生
    • 影视
    • 游戏
    • 句子
    • bootstrap4教程
    • 资源
    • 日期计算器
  • 其他
    • 说说
    • 关于本站
  1. 首页
  2. 前端
  3. 正文

javascript正则表达式使用reg.test()时慎用全局查找/.../g属性

2018年11月4日 6329点热度 0人点赞 0条评论

先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑。
[php]
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
[/php]

在创建正则表达式对象时如果使用了“g”标识符或者设置它了的global属性值为ture时,那么新创建的正则表达式对象将使用模式对要将要匹配的字 符串进行全局匹配。在全局匹配模式下可以对指定要查找的字符串执行多次匹配。每次匹配使用当前正则对象的lastIndex属性的值作为在目标字符串中开 始查找的起始位置。lastIndex属性的初始值为0,找到匹配的项后lastIndex的值被重置为匹配内容的下一个字符在字符串中的位置索引,用来 标识下次执行匹配时开始查找的位置。如果找不到匹配的项lastIndex的值会被设置为0。当没有设置正则对象的全局匹配标志时lastIndex属性的值始终为0,每次执行匹配仅查找字符串中第一个匹配的项。可以通下面的代码来查看在执行匹配相应的lastIndex 属性的值。

[php]
var str = "123#abc";
var re = /abc/ig;
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出7
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出7
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0
[/php]

这个时候可以在其中添加一条语句, 人工将位置归零, 防止这个 "错误" 的发生:
[php]
var re = /^\w$/g;
re.test('a'); //返回true
re.lastIndex = 0; //归零搜索的位置
re.test('b'); //返回true
[/php]
或者我们可以更简单地直接将g去掉:
[php]
var re = /^\w$/;
re.test('a'); //返回true
re.test('b'); //返回true
[/php]

转自:https://blog.csdn.net/leolu007/article/details/8576490

标签: js reg.test 全局匹配 正则表达式
最后更新:2018年11月4日

风君子

独自遨游何稽首 揭天掀地慰生平

点赞
< 上一篇
下一篇 >

猜你喜欢

  • 华为 HarmonyOS 开源鸿蒙方舟编译器前端工具“方舟 JS 运行时”正式开源

  • 禁止鼠标右键代码 禁止按键F5和禁止鼠标右键菜单 js代码

  • JS基础测试: typeof delete window.name 的返回结果是什么?​

  • JS实现汇率换算

  • js实现简单五子棋游戏源码

  • 【FCC】番茄时钟pomodoro clock网页版

  • 【FCC】Pairwise js算法

  • 【FCC】Map the Debris

  • 【FCC】Make a Person

  • 【FCC】Friendly Date Ranges

  • 【FCC】No repeats please

  • 【FCC】Inventory Update

文章评论

取消回复

风君子

独自遨游何稽首 揭天掀地慰生平

最新 热点 随机
最新 热点 随机
苹果 Apple Store 零售店扩展 Today at Apple 创想营活动,新增 7 座城市 曝骁龙 8 + 首批新机调试 6 月系统封包,年底马上发布台积电 + ARM 新架构骁龙 8 Gen 2 芯片 快手高管解读 Q1 财报:25% 月活用户创作内容,中长尾创作者内容贡献了 80% 以上播放量 【IT之家开箱】Redmi Note 11T Pro + 子夜黑图赏 数源科技:目前 5G 通信壳仅适用于华为 P50 Pro 机型,业务占比较小 苹果 Apple Watch 全新表盘“彩虹线条”上线,新款彩虹版表带开启预订,售价 379 元 999 元至 1299 元,小米 Redmi Note11 SE 5G 手机发布:搭载天玑 700 芯片,全系标配 128GB 存储 【IT之家评测室】红米 Note 11T Pro+ :首款 A + 认证 LCD 屏幕闪亮登场 AMD 公布智能访问存储技术:支持微软 DirectStorage,缩短游戏加载时间 首发价 2499 元,小米米家冰箱对开门 610L 墨羽岩发布:一级能效,20 格分区,支持 App 远程操控
抖音IP属地准确吗e地跑:全国线路覆盖率达92.5%,将升级智能扫码加油功能完成加油监控米哈游《原神》全球用户支出将突破 27 亿美元:打破最高季度纪录,中美日韩德支出最多索尼 QD-OLED 画谛系列电视 A95K 国行即将发布格力电器 2021 年营收 1878.69 亿元同比增长 11.69%施耐德电气顾俊:5G赋能,制造业智能化转型“加速”苹果将 iPad Air 2 和 iPad Mini 2 加入过时产品名单IDC:2021 年中国网络市场规模达 102.4 亿美元,路由器市场同比下滑 2.6%波导股份第一季度净利润 552.94 万元,同比增长 75.79%我们常用谁言寸草心报得三春晖歌颂母爱,它的作者是
Windows Search卸载最彻底的方法 魔兽世界7.35DKT天赋加点 wow7.3.5血DK团本天赋加点攻略 首款无边框骁龙888旗舰!努比亚Z30 Pro定档:5月20日见 首销秒罄!索尼PS5国行双人手柄套装开售:3628元起 iQOO Z5 外观正式亮相:三种配色,侧边指纹识别 销量低于预期:三星Galaxy Note20减产超3成 SpaceX将新一轮融资规模扩大至20亿美元 富达投资参投 腾讯发布2019游戏安全报告:定制外挂占比过半 游戏黑产资产惊人 消息称台积电 3nm 工艺第一阶段月产能预计不超过 4 万片晶圆 业界首款A77集成式5G旗舰Soc 小米要用联发科天玑1000+
标签聚合
IT资讯 股票 科技 腾讯 微软 谷歌 华为 银行卡 业界 信用卡 马斯克 利息 芯片 额度 苹果 秘籍 快科技 手机 小米 利率 银行 贷款 美国 支付宝 特斯拉 京东 iphone 三星 借款人 汽车
Tags
酒 胡萝卜 食物 私房菜 有什么好处 水果 能吃 鸡蛋 身体 会胖吗 副作用 吃什么 相克 好处 饮食 作用 土豆食谱 方法 牛肉 豆腐 糖 热量 茄子 好吃 营养 皮肤过敏 区别 菜谱 牛肉食谱 功效 怎么做 营养价值 豆腐食谱 维生素 土豆 热菜 食用方法 常吃 健康 排骨 汤类 高血压 牛奶 糖尿病人 做法 吃法 下饭菜 海鲜 一起吃 排骨食谱
最近评论
九九 发布于 3 周前(05月06日) 也可能是 IP2LOCATION 数据
风君子 发布于 5 个月前(12月20日) 直播这么赚钱的吗?
wanif 发布于 5 个月前(12月18日) 采用你提供的pe制作u盘后无法识别mac硬盘,如何解决?
robotunl 发布于 5 个月前(12月18日) 可以用了,感谢
robotunl 发布于 5 个月前(12月17日) DISM++链接下不了了啊,能再发一个么。 还有怎么制作和博主一样的PE u盘。
tiantian 发布于 10 个月前(08月08日) 谢谢分享!
欣姐 发布于 1 年前(02月06日) 很有道理啊
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 东莞台商都开始搬迁河源,梅州包括赣州一些地方要么就是内地城市,因为电子厂需要大量人力所以基本上都是中...
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 这个怎么有意思了,是不是太真实了 :smile: :smile:
东莞石碣维信五金制品有限公司睡觉一千五六 发布于 1 年前(12月15日) 台商大陆模式搞习惯了去了印度未必成功 :idea:

COPYRIGHT © 2021 风君子博客. ALL RIGHTS RESERVED.

豫ICP备14018241号