我正在尝试将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+”的重复次数)和它遇到的“or a }”一样多呢?
发布于 2011-08-24 20:28:46
我知道人们喜欢使用正则表达式来解析标记,这似乎是一种时尚……就像lady gaga,或者Fun Dip。但是如果你想有效地解析标记,你应该使用解析器或者编写解析器。
为什么,正则表达式是用来解析regular language的。大多数降价不能表示为NFA或DFA。正因为如此,使用正则表达式解析它们是...在最困难的时候是不可能的,在最容易的时候是慢的。
有几个很棒的JS bibtex解析器。
是两个,我建议你看看那些...我知道您已经完成了创建正则表达式的工作,但我保证,当您向真正的解析器迈出这一步时,您的工作将变得容易得多。
这只是一个小例子,说明为什么您的正则表达式不好,而解析器更好。
匹配模式包括
;;;)(>$#@ = 'dfsa3 342 '}
((())))+++>$#@ = 'dfsa3@@//''''''''''''
>$#@ = 'dfsa3@@//'''}}}}"""这些都不是好东西!
https://stackoverflow.com/questions/7175234
复制相似问题