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



比方说,我有以下字符串:

const { user } = props;
const { task } = state;
const { words } = response;
const { plays } = result;

我想选择

  • 以";const{〃
  • 以"结尾">
  • 但不包含单词";道具";或";状态">

我达到了

(?<=consts)(.*)(?=;)

这有助于我在期望的开始/结束内选择内容。但我不知道该如何排除那些旨在排除的词语。

如何获取

// Expected output 1
user } = response
user } = result

此外,我如何获得

// Expected output 2
const { user } = response;
const { user } = result;

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

您的(?<=consts)(.*)(?=;)当前模式匹配const和空白之间的任何零个或多个字符,直到;出现在同一行的最右边。您想要做的是跳过介于两者之间的字符串部分,这是用regex无法实现的。在这种情况下,你应该总是想出一个变通办法。也就是说,您可以使用模式中的捕获组和替换中的反向引用进行替换(如果您需要获得单个匹配(,也可以完全更改整个逻辑(当您需要多个匹配时,如这里所示(。

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

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

const text = "const { user } = props;nconst { task } = state;nconst { words } = response;nconst { plays } = result;"
console.log(
text.match(/consts(?!.*b(?:props|state)b).*;/g).map(x => x.replace(/{[^{}]*}/, '{ user }'))
)

输出:

[
"const { user } = response;",
"const { user } = result;"
]

相关内容

  • 没有找到相关文章

最新更新