regex之空格和哈希 (#) 作为 coffeescript 正则表达式导致错误

jpfss 阅读:35 2025-02-15 21:57:57 评论:0

表达这个问题的最简单方法是在回复中用一个小例子:

coffee> "hello".split(/: #/) #this is fine 
[ 'hello' ] 
coffee> "hello".split(/\s#/) #all good here too 
[ 'hello' ] 
coffee> "hello".split(/ #/)  #wtf?? 
[stdin]:1:20: error: missing ) 
"hello".split(/ #/) 

为什么最后一个正则表达式不起作用?稍微玩一下,似乎任何匹配 ^ +.*#.*$ 的正则表达式都会出错 注意,这是正则表达式开头的空格。 (例如 /foo#bar/ 但不是 /foo bar#baz/)。

这是解析器中的错误吗?

(在 Arch Linux 上运行 CoffeeScript 1.7.1 版)

请您参考如下方法:

因为咖啡词法分析器试图弄清楚第一个 / 是除法运算符还是正则表达式的开始,并且在这种情况下猜错了。 Here是相关代码。我不确定这是否是错误。

如果你把它放在一个文件中:

"hallo".match / #/ 
  1 

并使用 coffee -p 您会看到它被解析为除法运算符。 如果您在开头添加一个非捕获组,您将得到一个表达式(几乎,因为它确实占用更多空间和可忽略的正则表达式编译时间)等同于您的目标:

"hall #o".match /(?:) #/ 

编辑:

作为mu is to short已经指出,在空格前面放一个反斜杠可能会更容易。

"hall #o".match /\ #/ 


声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号