2012-02-11 9 views
3

私はこれについては、例えばJavaScriptの負の後読みの問題

http://www.amazon.com/dp/B00137QS28 

は、私は、次の正規表現を使用して、アマゾンのリンク内のAmazon ASINsを探しているいくつかのJavaScriptを持っている:/([A-Z0-9]{10})

しかし、私は、

http://www.amazon.com/Artist-Name/e/B000AQ1JZO 

だから、私はどのようなリンクを除外する必要がありますか?スラッシュと10文字の英数字コードの前に '/ e'があります。私は次のことがそれを行うだろうと思った:(?<!/e)([A-Z0-9]{10})しかし、それは否定的なlookbehindはJavaScriptで動作しないことが判明。そうですか?代わりにこれを行う別の方法はありますか?

ご協力いただければ幸いです。

注意点として、アマゾンのリンク形式の多くは、私はむしろ、例えば、ホワイトリスト、よりブラックリストにしたい理由である、があります注意して、これらはすべて同じページです:

http://www.amazon.com/gp/product/B00137QS28/ 
http://www.amazon.com/dp/B00137QS28 
http://www.amazon.com/exec/obidos/ASIN/B00137QS28/ 
http://www.amazon.com/Product-Title-Goes-Here/dp/B00137QS28/ 
+1

いいえ、ネガティブなビヘイビアはサポートされていません。 –

+0

ネガティブなlookbehindsはJSでは直接サポートされていませんが、ロジックを実装するための簡単な方法があります。 [この質問](https://stackoverflow.com/questions/641407/javascript-negative-lookbehind-equivalent)は、そのようなことに対する主な質問です。私は[もっと包括的な答え](https://stackoverflow.com/questions/35142364/regex-negative-lookbehind-not-valid-in-javascript/35143111#35143111)を別の場所に渡しました。 –

答えて

3

このような表現は、仕事とあなたの場合:

/(?!\/e)..\/([A-Z0-9]{10})/ 
+0

ニース。 (^ [\ s \ S]?|(?!\/e)[\ s \ S] {2}) 'と入力して、 –

2

([A-Z0-9]{10})が均等に動作しますうまくその入力の裏面に、

  • 戻ってそれを逆に、
  • 使用肯定先読み、あなたが

      文字列を逆に
    1. ことができそう。
  • 0

    あなたは/e/*ものをフィルタリングするために先読みを使用する必要があります。その後、それぞれのマッチから先頭の/e/をトリミングします。

    var source; // the source you're matching against the RegExp 
    var matches = source.match(/(?!\/e)..\/[A-Z0-9]{10}/g) || []; 
    var ids = matches.map(function (match) { 
        return match.substr(3); 
    }); 
    
    関連する問題