什么';JavaScript有什么问题;s正则表达式表示法?

什么';JavaScript有什么问题;s正则表达式表示法?,javascript,regex,syntax,literals,Javascript,Regex,Syntax,Literals,我在读道格拉斯·克罗克福德的网页,我忍不住注意到,在设计错误中,他提到了“文字正则表达式的符号”。他到底在说什么?JavaScript的正则表达式符号有什么问题,为什么?可能与它强制您转义/字符这一事实有关,也许他希望使用更独特的字符作为符号 /test/无效,而/test\/是有效的正则表达式 而在某些语言中,您实际上可以指定字符串中的表示字符,例如: $regex = '#test/#'; #符号在哪里表示。他真的不太清楚插入分号是错误的意思。也许他的意思是分号作为语句分隔符。如果是这样,

我在读道格拉斯·克罗克福德的网页,我忍不住注意到,在设计错误中,他提到了“文字正则表达式的符号”。他到底在说什么?JavaScript的正则表达式符号有什么问题,为什么?

可能与它强制您转义
/
字符这一事实有关,也许他希望使用更独特的字符作为符号

/test/
无效,而
/test\/
是有效的正则表达式

而在某些语言中,您实际上可以指定字符串中的表示字符,例如:

$regex = '#test/#';

#
符号在哪里表示。

他真的不太清楚插入分号是错误的意思。也许他的意思是分号作为语句分隔符。如果是这样,我不同意。如果没有分号,代码模糊器/小型化器就不会在代码上运行。

我可以想象,正则表达式文字符号是发展与语言规范解耦的正则表达式引擎的障碍

如果所有正则表达式都是字符串,那么它们在语言级别上总是有效的,正则表达式引擎可以更自由地解释它们

但这只是一个猜测。我不知道克罗克福德的话是什么意思


就我个人而言,我觉得regex文本非常有用。与新的RegExp(pattern,flags)替代方案相比,新的RegExp(pattern,flags)的详细程度要低得多,因为它需要同时遵守正则表达式转义和字符串转义规则(
“Path\\\\\with\\\\\backslash”
,有人吗?)。除了处理动态正则表达式之外,我看不出这种表示法有什么巨大的好处。

可能是注释和除法的斜杠弄乱了,或者是因为“它们应该是一行,没有空格或注释插入到其中”per。

非常正确,可能就是这样。但是除了PHP之外,还有哪些语言允许您指定字符呢?我很难想到任何一个,但那可能只是因为我很少使用正则表达式。是的。Crockford的抱怨是关于“重载”斜杠字符,但我认为他主要关心的是JS中的重载(我想!)。例如,如果您使用
/*…*/
注释掉代码块,您可以看到如果您尝试注释掉
/0x[0-9a-f]*/.test(strMyString),会发生什么情况用那个。有很多次我不得不使用RegExp()方法来创建正则表达式,因为文本容易出错。@Andrew真的吗?我知道这是怎么可能的,但我从未遇到过。@Justin在现实生活中不太可能经常遇到这个问题,特别是如果您的IDE支持JS语法高亮显示的话。但我已经遇到过几个具体的问题,这是一个真正的头痛。在记事本中注释掉一个页面上的所有JS,然后看到它在工作代码上消失,而这些代码你已经几周没碰过了。“什么…?但这不是问题。而且都被注释掉了!!”如果你在网站的代码库中嵌入了一些大型的、最小化的JS框架(如jQuery),然后注释掉(例如,看看它在没有jQuery的情况下是如何加载的),这也肯定会发生在你身上。有趣。@musicfreak基于正则表达式执行替换,并允许您选择替换的分隔符号。他对插入分号的抱怨是分号是“可选的”,因此可以插入。但问题是关于正则表达式文字中的粗体部分,而不是关于分号插入。谢谢你的回答,但我是专门问问题中粗体部分的。我感到困惑:)这听起来像是在咆哮。作者只是抱怨,没有详细说明为什么他认为JavaScript设计得很糟糕。@jmort253,这篇文章不是特别好,但Crockford是最有知识的ECMAScript传道者之一,他在关于该语言的演讲中做了大量阐述。他几乎所有的抱怨都是正确的(他在他的“好的部分”文章中解释了这一点,如果你感兴趣的话,这一点值得一看),但有些是不正确的。分号=>参见