vscode中正则表达式的不完整量词

ada*_*ian 7 regex visual-studio-code

我正在尝试为对象的开头创建一个正则表达式,以便我可以"在 vscode 的查找和替换中用一个完整的块替换块。

我的正则表达式

("id":{"\$oid":)[0-9]+(},"product_id":)[0-9]+(,")
Run Code Online (Sandbox Code Playgroud)

我的样本输入

{"id":{"$oid":973},"product_id":973,"product_name":"Scotch - Queen Anne","product_amount":92,"product_group":"not perishable","distribution_to":"The Salvation Army Visalia - Neighborhood Market","distribution_from":"MCFB","expiration_date":"8/24/2020","pack_date":"4/19/2021","sell_by_date":"12/6/2020","use_by_date":"2/18/2021","created_at":"2020-04-24 03:15:40 -0400","updated_at":"2020-04-24 03:15:40 -0400"},
Run Code Online (Sandbox Code Playgroud)

我已经在这些网站上成功测试了这个表达式:regex101.com、regexr.com,但是,当我粘贴到我的 vscode 中时仍然出现错误。

在此处输入图片说明

sai*_*aen 10

这是一个有效的正则表达式,至少在 VS Code 使用的 JavaScript 引擎中(请参阅此答案),但我认为 VS Code 的验证引擎被未转义的花括号混淆(就像我一样)——开头{在第一组中,并且}第二次闭幕。

正如@rioV8 和@Nick 在评论中所建议的,您需要使用反斜杠\将它们转义以使其工作:

("id":\{"\$oid":)[0-9]+(\},"product_id":)[0-9]+(,")
Run Code Online (Sandbox Code Playgroud)

这是一个演示原始正则表达式在 JS 中工作的小演示:

("id":\{"\$oid":)[0-9]+(\},"product_id":)[0-9]+(,")
Run Code Online (Sandbox Code Playgroud)
const regex = /("id":{"\$oid":)[0-9]+(},"product_id":)[0-9]+(,")/;

const sample = '{"id":{"$oid":973},"product_id":973,"product_name":"Scotch - Queen Anne","product_amount":92,"product_group":"not perishable","distribution_to":"The Salvation Army Visalia - Neighborhood Market","distribution_from":"MCFB","expiration_date":"8/24/2020","pack_date":"4/19/2021","sell_by_date":"12/6/2020","use_by_date":"2/18/2021","created_at":"2020-04-24 03:15:40 -0400","updated_at":"2020-04-24 03:15:40 -0400"},';

const result = sample.match(regex);

let output = [
  `full match:\t${result[0]}`,
  `group 1:\t${result[1]}`,
  `group 2:\t${result[2]}`,
  `group 3:\t${result[3]}`
]

document.querySelector("#result").innerText = output.join('\n');
Run Code Online (Sandbox Code Playgroud)