慕娘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;"
]
添加回答
舉報
0/150
提交
取消