断言该字符串具有必需的结尾

时间:2017-12-15 12:12:15

标签: c#

在C#中,我想检查字符串是否以*.js结尾。字符串是文件的名称,我想知道文件是否是JavaScript。

到目前为止,我只是这样做了:

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

对我而言,这看起来有点过分,因为我需要计算出现次数,而不仅仅是检查是否存在。

此外,代码因此错误而失败:

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

知道代码有什么问题吗?

断言字符串是否与给定的正则表达式一致的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

只需使用EndsWith

即可
Assert.IsTrue(myFilename!=null && myFilename.EndsWith(".js"));

答案 1 :(得分:2)

你的正则表达式的问题是:

  1. *是特殊的量词,它不能跟随任何内容(您的错误来源)。你的意思是"我之前想要什么"。在正则表达式中,这是.*,但在您的情况下,您甚至不需要它!正则表达式不是强制匹配所有字符串,只是表达部分。

  2. .也是一个特殊角色。它意味着"任何角色"。您只需要一个实际的点.字符,因此您也必须将其转义。 :\.

  3. 最后,没有精度匹配字符串的结尾。 $

  4. 正确的正则表达式" \.js$" (" .*\.js$")而不是" *.js"

    无论如何,要检查一个字符串是否以特定的子字符串结尾,你可以简单地使用string.EndsWith(".js"),这是@Toshi的回答。在任何方面都可能是一个更好的选择。

答案 2 :(得分:-1)

您可以使用子字符串函数来提取字符串的最后三个字符,并比较它是否等于" .js"或不。

Assert.IsTrue(myFile.Substring(myFile.Length-3)," .js")

除此之外,如前所述,EndsWith也是一种最佳解决方案。