Поэтому я создал большое количество объектов javascript с буквальным синтаксисом и забыл использовать кавычки для ключей многих, многих пар ключ-значение. Как бы я придумал регулярное выражение для "добавления одинарных кавычек в любую строку, не заключенную в одинарные кавычки, за которой сразу следует двоеточие" в vim?

Я попробовал регулярное выражение, найденное здесь, но оно добавляет пустой набор цитат после ключа.

2 ответа2

2

Я предполагаю, что каждая из ваших пар ключ: значение находится на отдельной строке, вот так:

var myObject = {
key1:val1,
key2:val2,
};

Затем следующие 2 регулярных выражения / замены выполняют то, что вам нужно:::%s/\(.*\):/'\1':/ а затем %s/''/'/

Первый заменяет весь текст, который предшествует двоеточию (это \(.*\): Part), тем же текстом (но в кавычках) и снова двоеточием ('\1': part). Это не учитывает ключи, которые уже заключены в кавычки, поэтому вторая команда просто заменяет любой набор из 2 одинарных кавычек только одной одинарной кавычкой.

Первая команда не будет работать, если у вас есть несколько пар ключ: значение в одной строке. В этом случае вы можете попробовать что-то вроде :%s/, \(.*\):/, '\1':/ где в начале двух выражений есть запятая и пробел. Вам все равно придется очистить первую запись в каждом объекте, так как перед ней не стоит запятая.

Какую бы команду вы не использовали, я бы рекомендовал заканчивать ее на /c , например :%s/\(.*\):/'\1':/c чтобы вы могли подтвердить каждую замену, по крайней мере, чтобы убедиться, что она работает так, как вы хотите.

Удачи!

0
:%s/^.\{-}:\s*\zs[^',]\+/'&'

кажется, добивается цели:

  • ^.\{-}:\s* соответствует всему до значения:

     ^             | .\{-}:              | \s*
    ---------------+---------------------+--------------------
     start of line | any character,      | as much whitespace
                   | as few as possible, | as possible
                   | until the 1st colon |
    
  • \zs[^',]\+\ - это наше фактическое совпадение. Он соответствует только значению, в основном максимально возможному любому символу, который не является ни одной кавычкой или комой.

  • '&' заменяет совпадение само по себе, заключенное в одинарные кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .