如何用正则单行代码修改OData查询中的PurchaseDate参数?
问题解答
当然可以用单行正则完成这个修改,不需要分步提取日期再替换,直接利用正则的捕获组就能一次性搞定:
let input = "/odata/businessreport?%24top=25&%24skip=0&%24count=true&%24format=application%2Fjson%3Bodata.metadata%3Dfull&%24filter=()%20and%20PurchaseDate%20nIN%202023-02-02T23%3A00%3A00.000Z%20and%20ForeignBarcode%20eq%20'abcd1234'"; // 单行正则替换 let result = input.replace(/PurchaseDate%20nIN%20(\d{4}-\d{2}-\d{2})T\d{2}%3A\d{2}%3A\d{2}\.\d{3}Z/, "date(PurchaseDate)%20eq%20$1"); console.log(result);
正则说明:
(\d{4}-\d{2}-\d{2}):用捕获组单独提取日期的年月日部分,后续通过$1就能直接引用这部分内容- 其余部分精准匹配原字符串里
PurchaseDate%20nIN%20后面的完整时间戳格式 - 替换目标直接写成
date(PurchaseDate)%20eq%20$1,$1会自动替换成捕获到的年月日
对你原有尝试的补充:
你之前分两步操作不仅代码冗余,还出现了括号位置错误(结果里把右括号放到了日期末尾)。单行正则替换既简洁,又能避免手动拼接字符串带来的失误。
运行上面的代码后,得到的结果完全符合要求:
/odata/businessreport?%24top=25&%24skip=0&%24count=true&%24format=application%2Fjson%3Bodata.metadata%3Dfull&%24filter=()%20and%20date(PurchaseDate)%20eq%202023-02-02%20and%20ForeignBarcode%20eq%20'abcd1234'
内容的提问来源于stack exchange,提问作者napsebefya
相关产品推荐
相关产品推荐

