我正在阅读Douglas Crockford的网页, JavaScript:世界上最容易被误解的编程语言,我不禁注意到,在设计错误下,他提到了“字面正则表达式的符号”。究竟他在说什么? JavaScript的正则表达式表示法有什么问题,为什么?
我正在阅读Douglas Crockford的网页, JavaScript:世界上最容易被误解的编程语言,我不禁注意到,在设计错误下,他提到了“字面正则表达式的符号”。究竟他在说什么? JavaScript的正则表达式表示法有什么问题,为什么?
可能与它强迫你逃脱的事实有关 /
也许他想要一个更独特的角色用作符号。
/test//
是无效的,而 /test\//
是一个有效的正则表达式。
在某些语言中,您实际上可以在字符串中指定标记字符,例如:
$regex = '#test/#';
哪里 #
符号做指示。
可能与它强迫你逃脱的事实有关 /
也许他想要一个更独特的角色用作符号。
/test//
是无效的,而 /test\//
是一个有效的正则表达式。
在某些语言中,您实际上可以在字符串中指定标记字符,例如:
$regex = '#test/#';
哪里 #
符号做指示。
我可以想象正则表达式文字表示法是阻止正则表达式引擎与语言规范分离的障碍。
如果所有正则表达式都是字符串,则它们在语言级别始终有效,并且正则表达式引擎可以更自由地解释它们。
但这只是猜测。我不知道克罗克福德的陈述是什么意思。
就个人而言,我发现正则表达式文字相当有用。比起来的要简单得多 new RegExp(pattern, flags)
需要坚持正则表达式逃避的替代方案 和 字符串转义规则("Path\\\\with\\\\backslashes"
, 任何人?)。我无法看到巨大的利益 这个 符号,除了处理动态正则表达式。
他真的不清楚分号插入是错误的意思。也许他将分号视为语句分隔符。如果是这样的话,我不同意。没有分号代码混淆器/缩小器不会在您的代码上运行。