【问题标题】:JavaScript Regex newlines ruin bibtex parsingJavaScript 正则表达式换行符破坏 bibtex 解析
【发布时间】:2011-08-24 12:15:13
【问题描述】:

我正在尝试将 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 对,例如:“author : 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+”的重复一样多),直到它遇到一个“或一个}?

【问题讨论】:

  • 您需要一个比.*\s+.*\s+.*\s+.*\s+.* 更大的子表达式来匹配换行符产生的所有空格。

标签: javascript regex parsing


【解决方案1】:

我知道人们喜欢使用正则表达式来解析标记,这似乎是一种时尚……就像 Lady gaga 或 Fun Dip。但是,如果您想有效地解析标记,您应该使用解析器或编写解析器。

为什么,正则表达式是用来解析regular language。大多数降价促销不能表示为NFADFA。正因为如此,使用正则表达式来解析它们……在最困难的时候是不可能的,而且在最简单的时候就很慢。

那里有几个很棒的 JS bibtex 解析器

是两个,我建议你看看那些......我知道你已经完成了创建正则表达式的工作,但我保证当你迈向真正的解析器时,你的工作会变得容易得多。

只是一个小例子,说明为什么你的正则表达式不好而解析器更好。

匹配模式包括

;;;)(>$#@ = 'dfsa3 342 '}
((())))+++>$#@ = 'dfsa3@@//''''''''''''
>$#@ = 'dfsa3@@//'''}}}}"""

这些不好!

【讨论】:

  • 感谢您的回复 Austin,但是您建议的两个库的问题是我不确定我是否被合法允许使用它们,因为我正在编写的软件不是免费软件。此外,正则表达式不是我的整个程序,而只是用于读取标签的部分。事实上,我正在尝试编写一个解析器,但我不习惯用 JavaScript 编程,并且不习惯使用正则表达式来完成这项工作。因此,任何关于如何更正正则表达式的建议或其他关于如何做到这一点的简单解决方案都非常受欢迎。
  • 它现在尝试使用 bibtex-js,但我不使用我的输入文件,因为它的评论处理被破坏了,我在修复它时遇到了麻烦。此外,我仍然不能 100% 确定 MIT 许可证是否允许我使用它。我正在编写一个内部工具来通过 Greasemonkey 上传发布列表,因此代码永远不会被发布。
  • 经过一些小改动后,Bibtex-js 也可以按我的意愿工作。而且我现在很确定我所做的事情符合 MIT 许可证。谢谢。
  • MIT 许可证简而言之就是在未经许可的情况下将其用于任何你想要的东西。你很安全
  • 仅供参考,有人来这里寻找不走捷径的 BibTeX 解析器,顺便看看我的项目,也称为bibtex-js。它解析 cmets、连接字符串等。
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
相关资源
最近更新 更多