摘要: 使用带有占位符的正则表达式来查找键和值相同的位置,并仅替换为键(在我的情况下,利用 ES6 对象属性速记语法来清理数千行损坏的 ES5 代码 - 我在 eslint 规则中找不到与 --fix 一起使用的自动助手)。
例:
module.exports = {
foo: foo,
bar: bar,
baz: someFunctionNotCalledBaz,
someOther: () => console.log('Defined directly. Not a reference to same name function.')
};
我想要什么(清理旧的,损坏的代码和ES6的NodeJS项目):
module.exports = {
foo,
bar,
baz: someFunctionNotCalledBaz,
someOther: () => console.log('Defined directly. Not a reference to same name function.')
};
我对正则表达式非常熟悉,我不确定这是否可行。使用 Vim 或带有正则表达式的 IDE 替换,我想找到一种方法说:
找到所有"word:word",不考虑空格,然后在值端找到匹配键:
(w+)(:{1}s{0,})(*SOMEHOW_REFERENCE_FIRST_MATCHING_GROUP_WITHIN_FIND*)
替换为引用(使用已经与匹配组一起使用的占位符):
$1
在同一个正则表达式中,这种"回溯"甚至可能吗?我确实查看了一堆与我的查询匹配的其他帖子,但无济于事。
这应该可以做到:
sed -E 's/(.+): 1/1/g' file
如果你不熟悉sed
,第一部分将寻找与模式匹配的字符串(.+): 1
,第二部分将用1
您看到的1
是反向引用,它们指的是捕获组。捕获组是括号内的文本(此处为(.+)
)。
(.+): 1
将找到任何包含 1 个或多个字符的字符串,后跟一个分号和一个空格,然后再次找到相同的字符串。
最后,sed
将用1
替换任何匹配的字符串,这是分号之前的部分。
希望这是有道理的!