2017-09-11 9 views
-4

그 값 유형이 무엇이든 상관없이 문자열 기반의 json 속성을 해당 키를 기반으로 제거하고 싶습니다. 그러나 그것의 값이 문자열이고 객체의 루트 레벨에있을 때만 그것을 제거하는 것은 좋을 때 좋을 것입니다. 나는이 시도 :Regex json 속성을 제거하십시오

[,]{1}[\s]*?\"attrName\"[ ]*?[:][ ]*?\".*\"[^,]|\"attrName\"[ ]*?[:][ ]*?\".*\"[,]{0,1} 

예 :하지만이 같은 간단한 일을 할 큰 많이 보이는 https://regex101.com/r/PAlqYi/1

, 무엇을하는 일은 ATTRNAME 첫 번째 속성 인 경우 쉼표뿐만 아니라 제거됩니다 보장입니다 , json 3의 중간에있는 마지막 오트. 누구든지이 정규식을 더 읽기 쉽게 만드는 더 좋은 아이디어가 있습니까?

+5

** ** JS 환경에서 JSON을 수정하는 데 정규식을 사용하려는 이유가 무엇입니까? – Amy

+1

정규 표현식으로는 그럴 수 없습니다. JSON을 구문 분석해야합니다. – bfontaine

+3

'var obj = JSON.parse (str); 삭제 obj [attrName]; str = JSON.stringify (obj); –

답변

0

파서를 사용할 방법이 있다면 더 안정적이고 읽기 쉬운 솔루션입니다. 정규식 \s*\"attr\" *: *\".*\"(,|(?=\s+\}))은 더 짧고 더 좋습니다. 내가 만든

Example

몇 가지 변화가 도움이 :

  1. [,] 같은 많은 문자 클래스를 사용하지 마십시오. 문자 클래스에 요소가 하나만있는 경우 자체적으로 남겨 두어야합니다.
  2. 필요할 때만 번호가 매겨진 카운트를 사용하십시오. 예 : {0,1}?이고 {1}은 무의미합니다.
  3. 이전 줄의 쉼표를 검색하는 대신 목록의 끝인지 여부를 확인하여 회선 다음에 }이 있는지 확인하면 조건을 함께 그룹화 할 수 있습니다.
  4. 긍정적 인 선행 기입은 }을 검색하기 위해 끝에 사용되므로 대체 중에 제거되지 않습니다.