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

假设我有以下字符串:


const { user } = props;

const { task } = state;

const { words } = response;

const { plays } = result;

我想选择的字符串


以“const {”开头

以“;”结尾

但不包含“props”或“state”等词

我达到了这个地步


(?<=const\s)(.*)(?=;)


这可以帮助我选择所需开始/结束内的内容。但我无法弄清楚如何排除那些旨在排除的词。


我怎样才能得到


// Expected output 1

user } = response

user } = result

此外,我怎样才能得到


// Expected output 2

const { user } = response;

const { user } = result;

我打算使用 NodeJS/javascript 在文件上运行类似的正则表达式模式。


慕娘9325324
浏览 110回答 1
1回答

莫回无

您当前的模式与空白(?<=const\s)(.*)(?=;)之间的任何零个或多个字符匹配,直到同一行中最右边的出现为止。您想要做的是跳过字符串之间的部分,这是使用正则表达式不可能实现的。在这些情况下,您应该始终考虑解决方法。也就是说,您可以在模式中使用捕获组进行替换,并在替换中使用反向引用(如果您需要获得单个匹配项),或者完全更改整个逻辑(当您需要多个匹配项时,就像这里一样)。const;在这种情况下,您可以提取当前匹配的所有字符串,确保匹配行上没有您不希望出现的单词,然后将大括号之间的所有字符串替换为该字符串(从所需的输出中推导出来{ user }) )。然后你可以使用类似的东西const text = "const { user } = props;\nconst { task } = state;\nconst { words } = response;\nconst { plays } = result;"console.log(&nbsp; &nbsp; text.match(/const\s(?!.*\b(?:props|state)\b).*;/g).map(x => x.replace(/{[^{}]*}/, '{ user }')))输出:[&nbsp; "const { user } = response;",&nbsp; "const { user } = result;"]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript