【问题标题】:Regex for filename with quotes in multipart正则表达式的文件名在多部分中带有引号
【发布时间】:2011-10-13 10:37:33
【问题描述】:

我正在尝试正确解析 multipart/form-data 请求,除非上传的文件包含双引号,否则它可以正常工作。

请求看起来像(摘自wireshark):

Content-Disposition: form-data; name="file"; filename="b'e\"e.JPG"

所以该文件实际上在我的本地文件系统上称为 b'e"e.jpg。浏览器正确地转义了引号。

我想从这个字符串中获取文件名b'e\"e.JPG

我找到了一个正则表达式,用于抓取带有转义引号的带引号的字符串:

/"[^"\\]*(\\.[^"\\]*)*"/i

(来源http://www.regular-expressions.info/regexbuddy/stringescapedmulti.html

当应用于字符串 "b'e\"e.JPG" 时,正则表达式可以完美运行,但当我尝试仅在 filename= 部分上对其进行范围时,例如:

/filename="[^"\\]*(\\.[^"\\]*)*"/i

我不会得到任何结果。

任何帮助将不胜感激

编辑

我正在使用 JavaScript,所以我将正则表达式放在 js fiddle 上:http://jsfiddle.net/hDBcs/

谢谢!

西蒙

【问题讨论】:

  • 使用 RegexBuddy 进行快速测试对我来说效果很好,Regex 的其他部分是否可能会搞砸?
  • 嗨,感谢您的测试 :) 但不幸的是,在 javascript 中它不起作用。我在 jsFiddle 上添加了一个快速测试(见编辑)。

标签: regex filenames multipart


【解决方案1】:

问题可能是您没有使用括号来获取所需的部分:

/filename="([^"\\]*(?:\\.[^"\\]*)*)"/i

【讨论】:

    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多