我正在尝试将bibtex文件读入我的JavaScript脚本。 用于解析文件的正则表达式是:
/(.*)\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对,如:“作者:Aaron Sloman”。
这不是:
@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 :(得分:1)
我知道人们喜欢使用正则表达式来解析标记,这似乎是一种时尚......就像Lady gaga,或Fun Dip。但是如果你想要有效地解析标记,你应该使用解析器或编写一个解析器。
为什么,正则表达式用于解析regular language。大多数降价促销不能表示为NFA或DFA。因为使用正则表达式来解析它们是......在最困难的时候是不可能的,而且最简单的就是放慢速度。
那里有几个很棒的JS bibtex解析器
是两个,我建议你看看那些......我知道你已经完成了创建正则表达式的工作,但我保证当你迈出真正的解析器时,你的工作会变得更容易。
只是一个小例子,说明为什么你的正则表达式是坏的,解析器更好。
匹配模式包括
;;;)(>$#@ = 'dfsa3 342 '}
((())))+++>$#@ = 'dfsa3@@//''''''''''''
>$#@ = 'dfsa3@@//'''}}}}"""
这些都不好!