2017-12-15 11 views
-3

C#では、文字列が*.jsで終わるかどうかチェックしたい。文字列はファイルの名前で、ファイルがJavaScriptかどうかを知りたい。私は1つ存在する場合だけチェックするのではなく、発生回数をカウントする必要があるため文字列に必要な終了があることをアサートする

私に
Assert.IsTrue(Regex.Matches(myFilename, "*.js").Count != 0); 

が、これは少しバックハンドのようだ:

はこれまでのところ、私はそれをやって、この方法を見つけました。

また、コードは次のエラーで失敗します。

Message: System.ArgumentException : parsing "*.js" - Quantifier {x,y} following nothing. 

コードに間違っている可能性がどのような任意のアイデア?

文字列が特定の正規表現に従っていると主張する最も簡単な方法は何ですか?

+7

ちょうど 'myFilename.EndsWith("。js ")'はどうですか? – DavidG

+0

@Liamそれは良いデュープターゲットではありません – DavidG

+0

ええ、私は(今)同意します。確かに重複はありますが – Liam

答えて

2

を使用します。

  1. *は特別数量詞である、それは(あなたのエラーのソースを)何も続かないことはできません。あなたは、 "私は何でも前にしたい"という意味です。正規表現では、これは.*ですが、あなたのケースではそれも必要ありません!正規表現は、式部分だけのすべての文字列に一致するように強制されません。

  2. .も特殊文字です。それは "任意の文字"を意味します。あなたは実際のドット.だけを欲しいので、それもエスケープする必要があります。 :\.

  3. 最後に、文字列の最後に一致する精度はありません。 $

正しい正規表現ではなく、 "*.js "のいずれか "\.js$"(又は" .*\.js$")であろう。


とにかくは、文字列が特定のサブで終了した場合@Toshiによって答えとして、あなたは、単に、string.EndsWith(".js")を使用することができます確認してください。おそらく、どんな面でもずっと良い選択です。

2

ちょうどあなたの正規表現に問題があるEndsWith

Assert.IsTrue(myFilename!=null && myFilename.EndsWith(".js")); 
-1

部分文字列関数を使用して、文字列の最後の3文字を抽出し、 ".js"と等しいかどうかを比較することができます。

Assert.IsTrue(myFile.Substring(myFile.Length-3) "の.js")、それから離れ


、既に述べEndsWithも最適解であるように。

+0

答えが貧弱な場合は、コメントを与えて、何の説明もせずに単にそれを下降させるのではなく、更新することができます。 「説明はありません」と答える問題を理解するのに役立たないでしょう。 :) –

関連する問題