2017-03-22 1 views
2

JSON으로 데이터를 구문 분석하려고합니다. 데이터는 다음과 같습니다 자바 정규식 - 부정적인 lookbehind 및 lookahead

[{ 
    'Id': 1, 
    'FirstName': 'bob', 
    'LastName': '', 
    'Description': 'description can include escaped single quotes: \'.' 
}] 

는 결과가되는 방법 :

[{ 
    "Id": 1, 
    "FirstName": "bob", 
    "LastName": "", 
    "Description": "description can include escaped single quotes: \'." 
}] 

점은 혼자 따옴표를 탈출 유지하면서 큰 따옴표로 모든 이스케이프 작은 따옴표를 대체하는 것입니다.

나는 정규식을 사용하여 이스케이프 처리 된 작은 따옴표를 무시하면서 작은 따옴표를 큰 따옴표로 변환 할 때 JSON을 큰 따옴표로 변환하는 데 이미 잘 작동합니다.

/((?!\\).{1}|^.{0,0})\'/g 

문제 :. 유효하지 JSON입니다 "LastName": "'

: 문제는 비트 'LastName': '', 그것은 단지 "가 아니라 두 번째 ...이로를 만들기로 첫 번째 견적을 대체한다는 것입니다

질문 : 나는

+0

데이터가 JavaScript 리터럴 인 경우 [JavaScript 파서] (https://github.com/ternjs/acorn)를 사용하십시오. – Ryan

+1

'.replace (/ '([^'\\]*(?:\\.[^'\\]*)*)'/ g, ' "$ 1"') 시도해 볼 수도 있습니다. –

+0

[this 하나] (https://regex101.com/r/5tWNgh/1) @ WiktorStribiżew – revo

답변

2

노력하고있어. 특수 문자를 이스케이프 처리하고 더 많은 시나리오를 처리하도록 Regex를 유지 관리 할 필요가 없습니다. [{ "ID": 1, "FIRSTNAME": "밥", "성": "", "설명": "당신의 STR이 값을해야합니다 이후

obj=[{ 'Id': 1, 'FirstName': 'bob', 'LastName': '', 'Description': 'description can include escaped single quotes: \'.'}] 
 
str=JSON.stringify(obj)
설명에 이스케이프 처리 된 작은 따옴표가 포함될 수 있습니다. '. "}]

1

Lookbehind가 javascri 지원하지 않습니다 ... 있는지 모두 작은 따옴표 더러운 솔루션입니다 내가 두 번 연속 string.replace을 실행하는 것 같은 느낌 교체받을 수 있도록 내 정규식을 수정할 수 있습니까? 태평양 표준시. 당신도 긍정적 인 선견자로 그것을 할 수 없습니다. 이 작업을 수행 할 수있는 더 신뢰할 수있는 방법은 전혀 lookarounds에 대해 생각하지 않고있다 : 나는 자바 스크립트 변수에 데이터를 저장하고 JSON.stringify 당신이 무엇을 달성하는 가장 좋은 방법이 될 것입니다 사용하여 생각

var str = str = `[{ 
 
    'Id': '', 
 
    'FirstName': 'bo\\\\\\\\'b', 
 
    'LastName': '', 
 
    'Description': 'des\\\\\\'cription can\\\\' include \\\\\\\\'escaped\\'single quotes: \\'.' 
 
}]`; 
 

 
console.log(str.replace(/(\\\\)+(')|\\+'|(')/g, function(match, p1, p2, p3) { 
 
    return p2 ? p1 + '\\"' : (p3 ? '"' : match); 
 
}));

관련 문제