我有以下正则表达式:
var re = /^(post|merge|delete) (\/WcfDataService1\.svc\/)(.*) HTTP\/1.1$[\s\S]*?(^{.+\}$)/im
这用于匹配批量请求中的各种项目:
--batchitems
Content-Type: application/http
Content-Transfer-Encoding: binary
POST /WcfDataService1.svc/Orders(123) HTTP/1.1
{"OrderID":"x58"}
这很棒!当我执行re.match(str);
时,我返回一个数组,如下所示:
[
'POST',
'/WcfDataService1.svc/',
'Orders(123)',
'{"OrderID":"x58"}'
]
但是,我希望JSON字符串在我的正则表达式中是可选的,因为它并不总是存在; e.g:
--batchitems
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE /WcfDataService1.svc/Orders(123) HTTP/1.1
// EOL here
但是我的正则表达式在这里失败了,因为它试图匹配大括号而它找不到它们,所以整个正则表达式都失败了。
如何使(^{.+\}$)
可选(显示0或1次)?我试过了(^{.+\}$){0,1}
但是没有用。
有什么想法吗?
请参阅:https://regex101.com/r/pT3fG0/2和https://regex101.com/r/nO8xZ7/1