【发布时间】:2013-02-12 00:07:16
【问题描述】:
我需要根据一个相当复杂的查询过滤一组字符串 - 在它的“原始”形式中,它看起来像这样:
nano* AND (regulat* OR *toxic* OR ((risk OR hazard) AND (exposure OR release)) )
要匹配的字符串之一的示例:
Workshop on the Second Regulatory Review on Nanomaterials, 30 January 2013, Brussels
所以,我需要使用 AND OR 和通配符进行匹配 - 所以,我想我需要在 JavaScript 中使用正则表达式。
我已经正确循环、过滤并正常工作,但我 100% 确定我的正则表达式是错误的 - 并且某些结果被错误地省略了 - 这里是:
/(nano[a-zA-Z])?(regulat[a-zA-Z]|[a-zA-Z]toxic[a-zA-Z]|((risk|hazard)*(exposure|release)))/i
任何帮助将不胜感激 - 我真的无法正确抽象我的思想来理解这种语法!
更新:
很少有人指出构造正则表达式的顺序的重要性,但是我无法控制将要搜索的文本字符串,因此我需要找到一个无论顺序如何都可以工作的解决方案.
更新:
最终使用了 PHP 解决方案,由于 twitter API 1.0 已弃用,请参阅 pastebin 示例函数(我知道在这里粘贴代码更好,但有很多...):
函数:http://pastebin.com/MpWSGtHK 用法:http://pastebin.com/pP2AHEvk
感谢大家的帮助
【问题讨论】:
-
你可能想试试a live RegExp testing tool。
-
在您的示例字符串中,“nano”出现在“regulatory”之后,但在您的正则表达式中,则相反。是否有任何预期的模式使得一个总是在另一个之前?再举几个例子有助于解释您的要求。
-
@Barney - 好建议,这就是我走到这一步的原因
-
@Chirag64 - 我匹配的字符串最初是推文,来自这个提要:twitter.com/nanoTOES - 所以,没有顺序,我们只是想减少数量并增加相关性.
-
@QL Studio:恐怕您将不得不在 AND & OR 中使用多个 if 条件,而不是在这种情况下尝试将所有内容都放在一个正则表达式中。
标签: javascript regex match