2011-08-24 105 views
1

我想讀取一個bibtex文件到我的JavaScript腳本中。 正則表達式來解析該文件是:JavaScript正則表達式換行破壞bibtex解析

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

這個工程,我希望它:

@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", 
} 

它給了我很好的key.value對像:「作者:艾倫·斯洛曼」。

這不:

@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

我知道人們喜歡使用正則表達式來解析標記,它似乎是一種時尚...像Lady Gaga或Fun Dip。但是如果你想要有效地解析標記,你應該使用解析器或者寫一個解析器。

爲什麼,正則表達式是爲了解析regular language,大部分降價不能被表示爲NFADFA。而且由於這種使用正則表達式來分析他們是......不可能在最困難的點,最簡單的就慢一點。

有幾個很大的JS中文提供解析器那裏

兩個,我建議你看那些......我知道你已經做的工作創建你的正則表達式,但我保證當你邁出真正的解析器時,你的工作會變得更容易。

只是一個很小的例子,說明爲什麼你的正則表達式不好,分析器好一些。

匹配模式包括

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

這些都不是好!

+0

感謝您的回覆奧斯汀,但關於您建議的兩個庫的問題是,我不確定我是否在法律上允許使用它們, 因爲我正在編寫的軟件不是免費軟件。正則表達式不是我的整個程序,而只是用於讀取標籤的部分。 事實上,我正在嘗試編寫一個解析器,但我不習慣用JavaScript進行編程,而正則表達式在哪裏可以找到我發現要做的工作。因此,如何糾正正則表達式或關於如何做到這一點的其他簡單解決方案的任何建議都非常受歡迎。 – Daniel

+0

它試圖現在使用bibtex-js,但我沒有使用我的輸入文件,因爲它的註釋處理被破壞了,而且我遇到了修復它的麻煩。如果MIT許可證允許我使用它,我也不能100%確定。我正在編寫一個內部工具來通過Greasemonkey上傳出版物列表,所以代碼永遠不會被髮布。 – Daniel

+0

Bibtex-js稍作修改後也能按我的要求工作。而且我現在很確定我正在做什麼符合MIT許可證。謝謝。 – Daniel