正则表达式查找并替换键与值 {foo:foo} 到 {foo} 相同的位置



摘要: 使用带有占位符的正则表达式来查找键和值相同的位置,并仅替换为键(在我的情况下,利用 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替换任何匹配的字符串,这是分号之前的部分。

希望这是有道理的!

最新更新