正则表达式以查找和替换Key与Value {foo:foo}相同的地方,以替换为{foo}

摘要: 将regex与占位符一起使用以查找键和值相同的位置,并仅替换键(在我的情况下,利用ES6对象属性简写语法来清理成千上万行损坏的ES5代码-在这里我找不到自动的eslint规则中的帮助程序,用于--fix)。

示例:

module.exports = {
    foo: foo,bar: bar,baz: someFunctionNotCalledBaz,someOther: () => console.log('Defined directly. Not a reference to same name function.')
};

我想要的(清理旧的,破损的代码并为NodeJS项目提供ES6):

module.exports = {
    foo,bar,someOther: () => console.log('Defined directly. Not a reference to same name function.')
};

我对正则表达式非常熟悉,我不确定这是否可能。使用Vim或带正则表达式的IDE替换我想找到一种表达方式:

查找所有“单词:单词”(不考虑空格),然后查找值侧的匹配关键字:

(\w+)(:{1}\s{0,})(*SOMEHOW_REFERENCE_FIRST_MATCHING_GROUP_WITHIN_FIND*)

替换为参考(使用已与匹配组一起使用的占位符):

$1

在同一个正则表达式中甚至可以进行这种“回溯”吗?我确实查看了很多与我的查询匹配的帖子,但无济于事。

esh2007 回答:正则表达式以查找和替换Key与Value {foo:foo}相同的地方,以替换为{foo}

这应该做到:

sed -E 's/(.+): \1/\1/g' file

如果您不熟悉sed,则第一部分将查找与模式(.+): \1匹配的字符串,第二部分将其替换为\1

您看到的\1是反向引用,它们引用捕获组。捕获组是括号内的文本(此处为(.+))。

(.+): \1将查找任何包含1个或多个字符的字符串,后跟一个分号和一个空格,然后再次查找相同的字符串。

最后,sed将所有匹配的字符串替换为\1,这是分号之前的部分。

希望这很有道理!

本文链接:https://www.f2er.com/3158074.html

大家都在问