【问题标题】:Why might Node perform different regex matching inside a script vs the repl?为什么 Node 会在脚本和 repl 中执行不同的正则表达式匹配?
【发布时间】:2017-03-23 13:34:57
【问题描述】:

我正在编写一个小脚本(并使用 Node v6 运行),我看到一些非常奇怪的行为。如果我将以下行放在脚本中,请说 index.js:

console.log((/autonom.*/ig).test('autonomy'))

并使用node index.js 运行它,我看到的是false。没想到!

更奇怪的是,如果我用 node 打开一个交互式 shell,然后运行:

> (/autonom.*/ig).test('autonomy')
true

正如预期的那样,我收到了true。脚本中的代码与 repl 中的代码有什么不同的效果吗?

编辑 正则表达式没有真正的原因有一点香料。即使是微不足道的,我也看到了相同的行为:

console.log((/^autonomy$/).test('autonomy'))

编辑情节大大加厚:

console.log((/autonom\S*/i).test('autonomy'))
console.log((/autonom\S*/i).test('autonomy'))

node index.js 打印此文件:

true
false

【问题讨论】:

  • 删除 g 修饰符。 console.log(/autonom.*/i.test('autonomy'))。见stackoverflow.com/questions/1520800/…
  • @WiktorStribiżew 不高兴:甚至 console.log((/​​^autonomy$/).test('autonomy')) 打印错误......
  • 注意括号 - console.log(/autonom.*/i.test('autonomy'))
  • 所有示例在脚本和 repl 中都返回 true(至少对于节点 v6.9.1)。
  • 两者都为我返回true .. Node v7.1.0 ,您是否有任何第三方模块与脚本版本一起加载?哦,Chrome 也返回 true,以完成循环.. :)

标签: javascript regex node.js


【解决方案1】:

我终于找到了问题的根源,我想我会分享这个问题的答案!

为什么 Node 在这种情况下会表现得很奇怪?

问题在于我从哪里获取原始字符串 - 恰好是从 PDF 文章中复制和粘贴。我们以字符串 'autonomy' 为例。

在我的编辑器 Atom 中,这看起来就像“自治”。就像我在原始问题中将它粘贴到 SO 时一样。

但是,如果我使用编辑器中的一个并将其作为十六进制缓冲区输出,我会看到:

6175746f6e6f6d01

作为比较,如果手动输入字符串“autonomy”,则为:

6175746f6e6f6d

这就是问题所在。它对你们所有人有用的原因,以及它在 REPL 中对我有用的原因,是我粘贴它的大部分地方(SO,bash,...)都不理解/扔掉了最后的 @987654323 @,让您看到“正确的”字符串 'autonomy' 的样子。

仅供参考,ASCII 字符 01SOH: Start of Header。耸耸肩!

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多