2010-06-20 11 views

Répondre

9

Pourrait peut-être faire avec le fait qu'il vous oblige à échapper / caractères, peut-être qu'il voulait un caractère plus unique à utiliser comme la notation.

/test// est invalide, tandis que /test\// est une expression régulière valide.

Alors que dans certaines langues, vous pouvez réellement spécifier le caractère denotion dans une chaîne, par exemple:

$regex = '#test/#'; 

# symboles font le denotion.

+0

Très vrai, c'est probablement ça. Mais quelles langues, en plus de PHP, vous permettent réellement de spécifier le personnage? J'ai du mal à y penser, mais c'est peut-être parce que je n'utilise presque jamais d'expressions régulières. –

+3

Oui. La plainte de Crockford portait sur le fait de «surcharger» le personnage de slash, mais je pense que sa principale préoccupation était la surcharge de JS en général (je pense!). Par exemple, si vous commentez des blocs de code avec '/*...*/', vous pouvez voir ce qui se passerait si vous essayiez de commenter '/0x[0-9a-f]*/.test(strMyString); 'avec ça. Il y a eu un tas de fois que j'ai dû utiliser la méthode RegExp() pour créer des expressions régulières car les littéraux étaient sujets aux erreurs. – Andrew

+0

@Andrew Vraiment? Je vois comment c'est possible, mais je n'ai jamais rencontré ça. –

0

Il n'est vraiment pas très clair sur ce qu'il veut dire par insertion de point-virgule étant une erreur. Peut-être veut-il dire les points-virgules comme délimiteurs d'énoncés. Si c'est le cas, je ne suis pas d'accord. Sans les points-virgules, les obfuscateurs/minifieurs ne fonctionnent pas sur votre code.

+0

Sa plainte au sujet de l'insertion de point-virgule est que les points-virgules sont" facultatifs "et sont donc insérés. – eyelidlessness

+0

Merci pour votre réponse, mais je demandais spécifiquement à propos de la partie en gras dans la question – alex

+0

J'étais confus :) Cela me semble une diatribe.L'auteur ne fait que se plaindre sans entrer dans les détails pourquoi il pense que JavaScript est mal conçu – jmort253

1

Je pourrais imaginer que la notation littérale regex est un obstacle pour l'évolution du moteur regex découplé de la spécification du langage.

Si toutes les expressions rationnelles étaient des chaînes, elles étaient toujours valables au niveau du langage, et le moteur de regex pouvait les interpréter plus librement.

Mais c'est juste une supposition. Je n'ai aucune idée de ce que Crockford voulait dire avec sa déclaration.

Personnellement, je trouve les littéraux regex plutôt utiles. Les sont beaucoup moins verbeux que l'alternative new RegExp(pattern, flags) avec son besoin d'adhérer à la fois regex échapper et règles d'échappement de chaîne ("Path\\\\with\\\\backslashes", quelqu'un?). Je ne peux pas voir l'énorme avantage pour cette notation, autre que pour traiter les expressions rationnelles dynamiques.

0

Peut-être foiré avec des barres obliques utilisées pour les commentaires et la division par this ou parce que "elles doivent être une ligne sans espace blanc ou commentaire inséré" par this.