2009-12-03 8 views
17

私はDouglas Crockfords Javascript: The Good Partsを読んでいます。私はちょうど正規表現の章を終えました。この章では、彼にはJavaScriptの\b、肯定先読み(?=)と否定先読み(?!)「ではない良い部分」JavaScript:良い部品;なぜ先読みは良くないのですか?

彼は\bが良くないという理由は説明して呼び出します(これは、単語の境界発見のため\w使用し、\wは、いずれかの失敗しますユニコード文字を使用する言語)、それは私には非常に良い理由のようです。

残念ながら、肯定的および否定的な先読みがうまくいかない理由は除外されており、私はそれを思い付くことができません。 Mastering Regular Expressionsは先読みに付随する力を私に示しましたが(もちろん、それがもたらす問題についても説明しています)、「良い部分ではない」とは考えられません。

JavaScript(正の|否定)先読みまたは(正の|否定)先読みが一般的に「良くない」とみなされる理由を説明できる人はいますか?

私はこの質問の唯一の人ではないようです:onetwo

+1

私はその文章を読んだ瞬間、私はそれを見つけ出し、これを思い付いた。非常に奇妙なことに、彼が言うことはすべて完璧な意味であり、彼はほとんど常に、物事が「悪い」と言った理由を説明しています。 – Skilldrick

+1

@Skilldrickに同意します。 Crockfordは、彼がこの本で作ったほぼすべての点について彼の推論を説明するのに本当に上手いですが、この場合、何も説明しません。私はあまりにも説明を見つけなかったのでグーグルで行き、ここで終わった。私は、肯定的/否定的な先読みは、彼らがどのように動作するか、不適切に使用されるとパフォーマンスに与える可能性のある潜在的な悪影響を理解している限り素晴らしいものです。 – Chev

答えて

10

:|(先読み後読み)総称し様々な実装の間での機能のサポートを比較して、このページのように、「前後参照」と呼ばれる|(負正の)ところで

Internet Explorerのperpetually buggy implementation of lookaheadsが原因である可能性があります。 JavaScriptに関する本を制作する人にとって、IEで動作しない機能は存在しないかもしれません。

+9

私はCrockford氏がこれを書いたときに何を考えていたのか分かりませんが、これはjavascriptの先読みに注意する最善の理由と思われます。しかし、バグの実装のために言語を責めるのは少し不公平だと感じています。 –

+6

覚えておいてください:node.jsが証明するように、JavaScriptはwebの外で使うことができます! –

+1

確かに!しかし、Javascript:node.jsが来る前に良い部分が書かれていたので、これはまだ最良の答えといえます。 –

2

彼はあまりにも難しいですか?

または:lookaheadsとlookbehinds(後者はJavaScriptではサポートされていません)正規表現の時間を大幅に増やします。しかし、JavaScriptで膨大な量のデータを正規表現しているわけではありません。彼らは素晴らしいです。それらが役に立つときにそれらを使用してください。

+1

あまりにも難しいと思われる...パフォーマンスが理由かもしれないが、それは言語仕様の問題よりも解決できるインタプリタの問題のほうが多い。 –

+3

「あまりにもハードな」ビットでは本当に深刻ではありませんでした。しかし、通訳の問題は、言語機能を避けるべきであると言ってもいい理由のようです。しかし、再び、私はCrockfordには、回避する価値のある先読みを生み出すような問題があることに同意します。ルックアバウトは素晴らしいです。 –

+4

Crockfordはスマートな男です。私は彼が先読みが悪いと判断した理由を誰よりもよく知っていると思うので、私は彼に電子メールを送りました。彼が答えるなら、私はここにそれを掲示する(もし彼が自分でそうしなければ)。 –

3

私が考えることができる唯一の理由は、一般的な正規表現エンジンの約半分でしかサポートされていないことが考えられます。あなたが普遍的にサポートされている構文に制限すると、

http://www.regular-expressions.info/refflavors.html

+3

私はその方向性についても考えていましたが、一般的にサポートの欠如は実際にそれをサポートする特定の言語の悪い部分として実際にそれを修飾するものではありません。 –

関連する問題