2011-08-24 5 views
1

JavaScript 스크립트에 bibtex 파일을 읽으려고합니다. 정규식이 파일을 구문 분석하는 데 사용입니다 : "저자 : 아론 슬로 만"그것은처럼 나에게 좋은 key.value 쌍을 제공JavaScript Regex newlines가 bibtex 구문 분석을 파손합니다.

@Article{journals/aim/Sloman99, 
    title = "Review of Affective Computing", 
    author = "Aaron Sloman", 
    journal = "AI Magazine", 
    year = "1999", 
    number = "1", 
    volume = "20", 
    url = "http://dblp.uni-trier.de/db/journals/aim/aim20.html#Sloman99", 
    pages = "127--133", 
} 

:

/(.*)\s*=\s*[{"'](.*|.*\s+.*|.*\s+.*\s+.*|.*\s+.*\s+.*\s+.*|.*\s+.*\s+.*\s+.*\s+.*)[}"'],?/g 

이 내가 그것을 원하는대로 작동합니다.

이되지 않습니다

@Article{journals/aim/Sloman99, 
    title = "Review of Affective Computing", 
    author = "Aaron 
    S 
    l 
    o 
    m 
    a 
    n", 
    journal = "AI Magazine", 
    year = "1999", 
    number = "1", 
    volume = "20", 
    url = "http://dblp.uni-trier.de/db/journals/aim/aim20.html#Sloman99", 
    pages = "127--133", 
} 

은 그냥 저자를 생략합니다.

그래서 많은 줄 바꿈이있는 항목과 일치하는 정규식 할 수있는 방법 (의 반복이있는만큼만하지 ". * \ S +") 그것은 "나}?

발생까지 있기 때문에
+0

개행이 발생하는 모든 공백과 일치시키기 위해서는'. * \ s +. * \ s +. * \ s +. * \ s +. *'보다 큰 하위 표현식이 필요합니다. – treecoder

답변

1

사람들은 정규 표현식을 사용하여 마크 업을 분석하는 것을 좋아하지만, 레이디 가가, 재미 딥과 같은 유행처럼 보입니다. 그러나 마크 업을 효율적으로 파싱하려면 파서를 사용하거나 글을 작성해야합니다.

는 왜, 정규 표현식은 regular language을 분석하기위한 것입니다. 대부분의 가격 인하가 NFA 또는 DFA로 표현됩니다. 그리고 그들 때문에 구문 분석을 정규식되어 사용이 될 수 없습니다 ... 가장 어려운 시점에서 불가능 그리고 가장 느린 속도로 천천히.

난 당신이 이미 일을했을 알고 ... 난 당신이 그보고 추천

은 두 가지 거기에 몇 가지 훌륭한 JS의하여 BibTex 파서있다 정규 표현식을 만들지 만, 실제 파서를 밟을 때 작업이 훨씬 쉬워 질 것이라고 약속드립니다.

왜 정규식이 좋지 않고 파서가 더 나은지에 대한 간단한 예입니다.

매칭 패턴

;;;)(>$#@ = 'dfsa3 342 '} 
((())))+++>$#@ = '[email protected]@//'''''''''''' 
>$#@ = '[email protected]@//'''}}}}""" 

포함이가 잘되지 않습니다!

+0

답장을 보내 주셔서 감사합니다 Austin,하지만 당신이 제안하는 두 라이브러리에 관한 문제는 합법적으로 허용 할 수 있는지 확실하지 않다는 것입니다. 제가 쓰는 소프트웨어가 자유 소프트웨어가 아니기 때문에 입니다. 또한 정규식은 내 전체 프로그램이 아니라 태그를 읽는 데 사용되는 부분입니다. 사실 파서를 작성하려고하지만 JavaScript로 프로그래밍하는 데 익숙하지 않고 정규식을 통해 내가 할 일을 찾았습니다. 그래서 어떻게 정규식이나 다른 간단한 해결책을 해결하는 방법에 대한 제안은 매우 환영합니다. – Daniel

+0

지금 bibtex-js를 사용하려했으나 주석 처리가 중단되어 입력 파일에서 작동하지 않습니다. 문제를 해결하는 데 어려움이 있습니다. 또한 MIT 라이센스를 사용하면 100 % 확신 할 수 없습니다. Greasemonkey를 통해 게시 목록을 업로드하는 사내 도구를 작성하므로 코드는 게시되지 않습니다. – Daniel

+0

작은 변화 후에 Bibtex-js는 내가 원하는대로 작동합니다.그리고 지금 내가하고있는 일이 MIT 라이센스를 따르고 있음을 확신합니다. 고맙습니다. – Daniel

관련 문제