我在JavaScript中编写一个简单的语法高亮显示,我需要找到一种方法同时测试多个正则表达式。
我们的想法是找出哪个是第一个,所以我可以确定要查找的新表达式集。
表达式可能类似于:
/<%@/
,/<%--/
,/<!--/
和/<[a-z:-]/
首先,我尝试了一种策略,我将这些表达式组合在一起,如:
/(<%@)|(<%--)|(<!--)|(<[a-z:-])/
这样我就可以找出哪个匹配的组没有未定义。但问题是,当某些子表达式包含组或反向引用时。
所以我的问题是:
有人知道在字符串中查找与多个正则表达式匹配的合理方式吗?
答案 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语法的知识。