javascript - 相同的 RegExp 返回不同的结果 - 第一次正确结果,第二次为空

标签 javascript regex

我试图找出我在 javascript 中看到的一些奇怪的逻辑, 我有下一个代码:

var rgx = /(\S*)\s(\S*)/g;
rgx.exec("Yosi 1"); // returns ["Yosi 1","Yosi","1"]
rgx.exec("Yosi 1"); // returns null
rgx.exec("Yosi 1"); // returns ["Yosi 1","Yosi","1"]

为什么第二次我得到空值?我需要以某种方式重置正则表达式对象吗?

最佳答案

According to the documentation ,正则表达式对象的 lastIndex 属性在每次使用 g 时都会更新。在第一次匹配之后,lastIndex 将位于字符串的末尾,因此当您将它与同一字符串进行比较时,它会开始在末尾查找匹配项,因此它不会找到任何内容。

您可以不使用 g 或使用 .match 或其他替代方案,具体取决于您的用例。

关于javascript - 相同的 RegExp 返回不同的结果 - 第一次正确结果,第二次为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501362/

相关文章:

java - 创建我自己的文档查看器

javascript - Pathjs路由问题

javascript - Paypal Express Checkout/React - 发送产品信息

javascript - Node.js 中的正则表达式不匹配

php - 如何在查询字符串中进行精确模式匹配

java - 正则表达式 - 替换开始和结束字符序列

javascript - Angular Controller 功能不会将结果从一个功能返回到另一个功能

javascript - 右键单击(上下文菜单)div 类,但不要右键单击子 div 类

html - 接受从 0 到 60 的数字,但不允许前导零

Javascript正则表达式有20个字符,连续超过n个数字