我正在尝试正确解析multipart / form-data请求,除非上传的文件包含双引号,否则它会起作用。
请求看起来像(摘自wireshark):
Content-Disposition: form-data; name="file"; filename="b'e\"e.JPG"
因此该文件在我的本地文件系统中实际上被称为“e.jpg”。浏览器正确地转义了引号。
我想从这个字符串中获取文件名b'e\"e.JPG
。
我找到了一个正则表达式,用于抓取带有转义引号的带引号的字符串:
/"[^"\\]*(\\.[^"\\]*)*"/i
(来源http://www.regular-expressions.info/regexbuddy/stringescapedmulti.html)
正则表达式在应用于字符串"b'e\"e.JPG"
时非常有效,但当我尝试将其范围仅限于filename=
部分时,例如:
/filename="[^"\\]*(\\.[^"\\]*)*"/i
我不会得到任何结果。
任何帮助都会非常感激
修改:
我正在使用JavaScript,因此我将正则表达式放在js小提琴上:http://jsfiddle.net/hDBcs/
谢谢!
西蒙
答案 0 :(得分:4)
问题可能是您没有使用括号来获取所需的部件:
/filename="([^"\\]*(?:\\.[^"\\]*)*)"/i