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.作者投稿可能会经我们编辑修改或补充。