为了账号安全,请及时绑定邮箱和手机立即绑定

用于选择具有特定开始和结束字符串的文本的正则表达式,并且还排除特定单词

用于选择具有特定开始和结束字符串的文本的正则表达式,并且还排除特定单词

慕娘9325324 2023-11-11 21:44:31
假设我有以下字符串:const { user } = props;const { task } = state;const { words } = response;const { plays } = result;我想选择的字符串以“const {”开头以“;”结尾但不包含“props”或“state”等词我达到了这个地步(?<=const\s)(.*)(?=;)这可以帮助我选择所需开始/结束内的内容。但我无法弄清楚如何排除那些旨在排除的词。我怎样才能得到// Expected output 1user } = responseuser } = result此外,我怎样才能得到// Expected output 2const { user } = response;const { user } = result;我打算使用 NodeJS/javascript 在文件上运行类似的正则表达式模式。
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您当前的模式与空白(?<=const\s)(.*)(?=;)之间的任何零个或多个字符匹配,直到同一行中最右边的出现为止。您想要做的是跳过字符串之间的部分,这是使用正则表达式不可能实现的。在这些情况下,您应该始终考虑解决方法。也就是说,您可以在模式中使用捕获组进行替换,并在替换中使用反向引用(如果您需要获得单个匹配项),或者完全更改整个逻辑(当您需要多个匹配项时,就像这里一样)。const;


在这种情况下,您可以提取当前匹配的所有字符串,确保匹配行上没有您不希望出现的单词,然后将大括号之间的所有字符串替换为该字符串(从所需的输出中推导出来{ user }) )。


然后你可以使用类似的东西


const text = "const { user } = props;\nconst { task } = state;\nconst { words } = response;\nconst { plays } = result;"

console.log(

    text.match(/const\s(?!.*\b(?:props|state)\b).*;/g).map(x => x.replace(/{[^{}]*}/, '{ user }'))

)

输出:


[

  "const { user } = response;",

  "const { user } = result;"

]


查看完整回答
反对 回复 2023-11-11
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信