比方说,我有以下字符串:
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;"
]