그래서 리터럴 구문을 사용하여 많은 수의 자바스크립트 개체를 만들었고 수많은 키 값 쌍의 키에 따옴표를 사용하는 것을 잊어버렸습니다. vim에서 "작은 따옴표가 아닌 문자열에 작은 따옴표를 추가하고 바로 뒤에 콜론을 추가"하는 정규식을 어떻게 고안합니까?
나는 찾은 정규식을 시도했다여기하지만 키 뒤에 빈 따옴표 세트가 추가됩니다.
답변1
다음과 같이 각 키:값 쌍이 한 줄에 있다고 가정하겠습니다.
var myObject = {
key1:val1,
key2:val2,
};
:%s/\(.*\):/'\1':/
그런 다음 다음 2개의 정규식/대체를 통해 필요한 작업을 수행합니다.
%s/''/'/
첫 번째는 콜론(부분 \(.*\):
) 앞에 있는 모든 텍스트를 동일한 텍스트(따옴표로 묶음)로 바꾸고 다시 콜론( '\1':
부분)을 바꿉니다. 이는 이미 인용된 키를 고려하지 않으므로 두 번째 명령은 단순히 2개의 작은따옴표 세트를 1개의 작은따옴표로 바꿉니다.
한 줄에 여러 개의 키:값 쌍이 있는 경우 첫 번째 명령은 작동하지 않습니다. 그런 경우에는 :%s/, \(.*\):/, '\1':/
두 표현의 시작 부분에 쉼표와 공백이 있는 것과 같은 것을 시도해 볼 수 있습니다 . 각 개체의 첫 번째 항목은 앞에 쉼표가 없기 때문에 정리해야 합니다.
어떤 명령을 사용하든, 적어도 원하는 방식으로 작동하는지 확인하기 위해 각 대체 항목을 확인할 수 있도록 /c
으로 끝내는 것이 좋습니다 .:%s/\(.*\):/'\1':/c
행운을 빌어요!
답변2
:%s/^.\{-}:\s*\zs[^',]\+/'&'
트릭을 수행하는 것 같습니다 :
^.\{-}:\s*
값 앞의 모든 항목과 일치합니다.^ | .\{-}: | \s* ---------------+---------------------+-------------------- start of line | any character, | as much whitespace | as few as possible, | as possible | until the 1st colon |
\zs[^',]\+\
우리의 실제 경기입니다. 기본적으로 작은따옴표나 쉼표가 아닌 모든 문자의 값과만 일치합니다.'&'
작은따옴표로 묶인 일치 항목 자체를 대체합니다.