假设我有以下字符串: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;"
]
添加回答
举报
0/150
提交
取消