2011-06-26 6 views
0

URL一致の正規表現を作成しようとしていますが、動作しません。異なるURLを一致させるための正規表現

対象のURLがある...

var subject = "http://encore.lsbu.ac.uk/iii/encore/search/C%257CSab%257COrightresult%257CU1?lang=eng&suite=pearl"; 

正規表現がある...

var regex = /http:\/\/encore.lsbu.ac.uk\/iii\/encore\/search\/C%257CS[a-z][A-Z][0-9]%257COrightresult%257CU1?lang=eng&suite=pearl/i; 

そして、私はそれをテストするためにJavaScriptを使用しています。

var answer = regex.test(subject); 
// answer is false 

目標は、文字列の途中で変更されたキーワードを持っていますが、文字列全体がURLにマッチする正規表現で任意のURLを一致させることです。言い換えれば、キーワードの部分がチェックされるべきではないことを除いて、両方の文字列が一致する必要があります。私は間違って何かしていますか?

+0

'[a-z] [A-Z] [0-9]'は大文字と数字のあとに続く小文字です。 '[a-zA-Z0-9]'はそれらの組み合わせですが、1文字のみです。 '[a-z] [A-Z] [0-9] *'はゼロ以上の文字です。 etcetc ..男を読む時間.. –

+0

目標は全体の文字列が一致している必要がありますが、それはキーワードであり変数であるため、エスケープする必要があります(一致しません)。 – Neutralizer

+0

エスケープではどういう意味ですか? –

答えて

3

は、固定された正規表現です:

/http:\/\/encore\.lsbu\.ac\.uk\/iii\/encore\/search\/C%257CS[a-z0-9]*%257COrightresult%257CU1\?lang=eng&suite=pearl/i

私はそれを次のように変更作られた:

  • をバックスラッシュでURLのドットをエスケープしました。
  • [a-z][A-Z][0-9][a-z0-9]*を0回以上繰り返した文字に一致するように変更しました。
    • また、ちょうど2倍にそれらを一致させるために1回以上、または{2}文字を一致させるために+代わり*の使用することができます(これはあなたの例の文字列の場合ですが、すべてのケースではないかもしれません)。
  • URLの疑問符をバックスラッシュでエスケープしました。

編集:それは(正規表現は大文字と小文字が区別されます)は必要ありませんので、A-Zを削除しました。

+0

最後の '/ i'は文字列全体を大文字と小文字を区別しないので、' a-z'も持っている場合は 'A-Z'部分は必要ありません。 +1とにかく;-) –

+0

真。私は 'A-Z'を削除しました - それを指摘してくれてありがとう! – EdoDodo

+0

これらのタイプの文字の代わりに、どのようなタイプの文字も使用できますか?特殊文字も含まれています。 – Neutralizer

1

私が正しく理解していれば、元の文字列の 'ab'の代わりに任意のキーワードの文字を受け入れることを除いて、URLを照合しようとしています。

[a-z] [A-Z] [0-9]は、小文字、大文字、数字の順に指定します。代わりに\ wを使用してみてください。

任意の長さのキーワードを受け入れる場合は、\ s +を使用します。正確に2文字に制限したい場合は、\ w {2,2}を試してみてください。

だからあなたのURLのrelavant一部は次のようになります。ここでは

/C%257CS\s+%257 
+0

@Stephen、あなたは、文字、数字、および '_ 'と一致する' \ w'を意味すると思います。 '\ s'は任意の空白文字(space、tab、cr、lf)を意味します。 –

関連する問題