【问题标题】:Javascript: Check string to match patternJavascript:检查字符串以匹配模式
【发布时间】:2016-03-23 23:37:51
【问题描述】:

我需要测试与特定模式匹配的字符串天气。 String 是完整的文件路径,例如: C:\some\path\to\folder\folder.jpg 或者 C:\another\file\path\file.jpg

模式是:不带扩展名的文件名应该与它所在的父文件夹名称完全匹配。文件名可以是任何可能的值。

所以,在我的示例中,只有第一个字符串匹配模式:

C:\some\path\to\文件夹\文件夹.jpg

这个测试可以用一个正则表达式在javascript中进行吗?

【问题讨论】:

  • 在您的示例中,folder.jpg 的扩展名为.jpg。条件没有扩展名的文件名应该与它所在的父文件夹名称完全匹配在这里满足吗?
  • 尝试使用 indexOf 方法 var str = "Hello world, Welcome to the universe."; var n = str.indexOf("欢迎"); w3schools.com/jsref/jsref_indexof.asp

标签: javascript regex


【解决方案1】:

是的,您可以,通过后向引用

\\([^\\]+)\\\1\.[^.\\]*$

第一组 ([^\\]+) 捕获文件夹名称,然后后面的引用 (\1) 引用它说“这里是同一件事”。

所以在上面,我们有:

  • \\ - 匹配文字反斜杠
  • ([^\\]+) - 文件夹名称的捕获组
  • \\ - 另一个文字反斜杠
  • \1 - 对捕获组的反向引用说“同样的事情”
  • \. - 文字 .(用于介绍扩展)
  • [^.\\]* - 零个或多个扩展字符(您可能希望将 * 更改为 + 以表示“一个或多个”)
  • $ - 字符串结束

On regex101

如果您认为C:\some\path\to\folder\folder.test.jpg 是有效匹配项(例如,您认为folder.test.jpg 上的扩展名是.test.jpg,而不是.jpg),只需从接近末尾的[^.\\] 中删除. .

如果你想允许没有扩展名的文件,也许\\([^\\]+)\\\1(?:\.[^.\\]+)?$(?:\.[^.\\]+)? 是可选扩展名。

【讨论】:

  • 我认为您应该将点添加到最后一个否定字符类,否则它将匹配例如\folder\folder.test.jpg
  • @SebastianProske:你说得对,我已经修好了。虽然我认为这取决于您对“扩展名”的定义(是扩展名.jpg.test.jpg)。不过,我同意你的看法。
猜你喜欢
  • 2012-09-17
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2018-04-03
  • 2014-09-03
相关资源
最近更新 更多