0

継承されたコードで JSLint を実行したところ、次の結果が得られました。

Problem at line 24 character 36: Unexpected '\'.

content = content.replace(/\<a href=/g, '<a target="blank" href=');

私はしばらくの間グーグルをしてきましたが、これは、Javascript の置換でエスケープする必要がないことを示唆しています。

HTML += '<div class="articleBody">' 
    + this.myData.record[0][0][5].replace(/<\/?a[^>]*>/gi,'') + '</div>';

しかし、私の標準的な regExp イントロは、他のいくつかのランダムなサイトと同様に、Javascript について具体的に話していることを示唆しています (ただし、独自の例では JSLink が正しいことを示唆しています)。

次のアサーション文字は、単語の最初と最後で一致します。それらは次のとおりです。

< と >

Mozilla のページ ( replace()RegExp ) は < & > でアサーションを行うとは言っていませんが、Javascriptが RegExp/replace メソッドで意図的に < でアサーションを行わないと明示的に述べている場所を見つけることができませんでした。. つまり、 < をエスケープする Javascript の実装が間違っていると言っている場所はどこにもありません。 実際、エスケープされたまたはエスケープされていない< は正常に機能するようです。確かに、予約されていないエスケープされた文字は問題なく動作するようです。たとえば、\e === e ですが、\t !== t wrt replace() です。

余談ですが、すべての RegExp の実装が同じであるとは限らないことは認識しています。しかし、それはかなり一般的な知識です。私が見つけるのに苦労しているアサーション。

誰かが私のためにこれを寝かせてもらえますか?It Is Writtenその < がJavascript RegExpのアサーションのマーカーとして意図的に無視され、それとは逆の動作が正しくないことを見つける場所はありますか?

4

2 に答える 2

2

JSLint はlintであり、(作成者の基準によると) コードに問題があることを示していますが、それはコードが意味的に間違っているという意味ではありません。人々はエスケープ<>、Javascript コードの一部が HTML として解釈されるのを回避し<ますが、あなたの場合のエスケープは役に立ちません。

\<JS Regex では、と同等であることが保証されてい<ます。(ECMA-262 §15.10.2、IdentityEscape)。基本的に、エスケープされた非英数字はそれ自体と同じです。(ただし、\e標準では定義されていないようです。) assertions とは無関係(?<=…)です。

于 2012-05-01T16:29:25.877 に答える
0

どうぞ、http://www.regular-expressions.info/lookaround.htmlにあります。

「最後に、JavaScript、Ruby、Tcl などのフレーバーは、先読みをサポートしていますが、後読みをまったくサポートしていません。」

後読みについての重要な注意事項から参照してください

于 2012-05-01T16:10:18.970 に答える