Regex, чтобы найти и заменить, где ключ совпадает со значением {foo: foo} to {foo} - PullRequest
0 голосов
/ 05 ноября 2019

Резюме: используйте регулярное выражение с заполнителями, чтобы найти, где ключ и значение совпадают, и замените его только ключом (в моем случае, используя сокращенный синтаксис свойства объекта 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 Replace w / regex, я хотел бы найти способ сказать:

Найти все «слово: слово» независимо от пробелов, а затем соответствующий ключ на стороне значения:

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

Заменить ссылкой (используя заполнитель, который уже будет работать с соответствующей группой):

$1

Является ли этот "просмотр" ещевозможно в пределах того же регулярного выражения? Я просмотрел кучу других постов, которые соответствовали моему запросу, но безрезультатно.

1 Ответ

1 голос
/ 05 ноября 2019

Это должно сделать это:

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

Если вы не знакомы с sed, первая часть будет искать строки, соответствующие шаблону (.+): \1, а вторая часть заменит его на\1

Вы видите \1 обратные ссылки, они относятся к группе захвата. Группа захвата - это текст внутри скобок (здесь (.+)).

(.+): \1 найдет любую строку из 1 или более символов, за которой следует точка с запятой и пробел, а затем снова та же строка.

И, наконец, sed заменит любую подходящую строку на \1, которая является частью перед точкой с запятой.

Надеюсь, это имеет смысл!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...