2017-11-08 6 views
1

일반 텍스트를 js 배열로 구문 분석하는 방법을 찾고 있습니다. 나는 이미이 일을하고 싶지만 붙잡혀있는 어떤 계획을 발견했다. 일반 텍스트의일반 텍스트를 js 배열로 구문 분석 - 두 번째 요소에 구분 기호를 추가하십시오.

부 :

2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}2017-11-08 09:53:02,355 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"} 

예상 결과

const arr = [ 
    '2017-11-08 09:43:49,153 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}', 
    '2017-11-08 09:53:02,293 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}', 
    '2017-11-08 09:53:02,355 [INFO ] root: {\"methodId\":6,\"requestBody\":{},\"token\":\"XXXX\"}' 
] 

정규식 패턴 :

/}\d{4}-\d{2}/ 

각 청크 개체 "}"를 닫고 새 날짜 "YYYY-MM"을 시작하여 끝납니다. 내가 이런 식으로 분할하는 경우

문제

plainText.split(/}\d{4}-\d{2}/) 

, 그것은 항상 내 분리 "를 먹고". 거기에 텍스트를 분할하고 분할 된 쌍에서 두 번째 요소에 설립 된 구분 기호를 추가하는 몇 가지 방법이 있습니까? 그런 다음 첫 번째 항목에 '}'을 추가하고 두 번째 항목에서 '}'을 삭제할 수 있습니다. 그것은 내가 생각하고있는 해결책이지만 어쩌면 당신은 더 나은 것을 제안 할 수 있습니다. JSON 데이터는 날짜와 같은 문자열을 포함하지 않는 경우

+0

이 엉망인 평범한 텍스트는 어디서 왔습니까? – melpomene

+1

's.split (/ \ b (? = \ d {4} - \ d {2} - \ d {2} \ s + [\ d :] + \ s + \ [정보] \ s + 루트 :) /). filter (부울)'. 요구 사항이 느슨하면 패턴을 줄이십시오 (시나리오에 따라 날짜가 다르면/\ b (? = \ d {4} - \ d {2} - \ d {2} \ s/문자열은 JSON 데이터에 표시되지 않습니다.) [이 데모] (https://regex101.com/r/6ZPbkW/1/)를 참조하십시오. –

+0

@melpomene API와의 반응은 입니다. 답변을 얻는 형식을 제어하십시오. –

답변

1

, 당신은 (그것을 안전하게 재생)

s.split(/\b(?=\d{4}-\d{2}-\d{2}\s/).filter(Boolean) 

또는 더 자세한 정보를 사용할 수 있습니다 :

s.split(/\b(?=\d{4}-\d{2}-\d{2}\s+[\d:,]+\s+\[INFO ]\s+root:)/).filter(Boolean) 

regex demo

를 참조하십시오

요점은 datetime과 같은 문자열과 일치하지만 소비하지 않으므로 전체 패턴은 긍정적 인 미리보기 (?=...) 구문으로 묶입니다.

긴 패턴 정보

  • \b - 단어 경계
  • (?= - 긍정적 예측 패턴의 시작
    • \d{4}-\d{2}-\d{2} - 날짜와 같은 문자열 (4 자리-2 자리-2 숫자)
    • \s+ - 1 개 이상의 공백
    • ,451,515,
    • [\d:,]+ - 1 이상의 숫자 :/또는 ,
    • \s+ - 1 이상의 공백
    • \[INFO ] - [INFO ] 문자열
    • \s+ - 1+ 공백
    • root: - root: 문자열
  • ) - 미리보기 머리말
+1

감사합니다! –