同时使用多个regexps进行测试(用于句法分析)

时间:2009-12-29 13:16:13

标签: javascript regex parsing

我在JavaScript中编写一个简单的语法高亮显示,我需要找到一种方法同时测试多个正则表达式。

我们的想法是找出哪个是第一个,所以我可以确定要查找的新表达式集。

表达式可能类似于:

/<%@//<%--//<!--//<[a-z:-]/

首先,我尝试了一种策略,我将这些表达式组合在一起,如:

/(<%@)|(<%--)|(<!--)|(<[a-z:-])/

这样我就可以找出哪个匹配的组没有未定义。但问题是,当某些子表达式包含组或反向引用时。

所以我的问题是:

有人知道在字符串中查找与多个正则表达式匹配的合理方式吗?

2 个答案:

答案 0 :(得分:5)

是否有任何特殊原因导致您无法对输入进行标记,然后测试每个标记的开头以查看突出显示的类型?我想你是在思考这个问题。一个简单的级联if-elseif将涵盖这一点很好:

if (token.startsWith("<%@")) {
  // paint it red
}
else if (token.startsWith("<%--")) {
  // paint it green
}
else if (token.startsWith("<!--")) {
  // paint it blue
}
else if (token.matches("^<[a-z:-]")) {
  // paint it black
}

以上是伪代码,需要神奇地翻译成JavaScript。我将此作为练习留给读者。

答案 1 :(得分:2)

ANTLR是一个优秀的语法开发系统。有一个项目可以在http://code.google.com/p/antlr-javascript/

为它构建一个JavaScript后端

我同意Welbog对你的正则表达式问题的回答,但你可以通过查看ANTLR生成的语法来学习很多关于实现JavaScript语法的知识。