我正在用 JavaScript 编写一个简单的语法荧光笔,我需要找到一种同时测试多个正则表达式的方法。
我的想法是找出哪个先出现,这样我就可以确定要查找的新表达式集。
表达式可以是这样的:
/<%@/
, /<%--/
, /<!--/
和 /<[a-z:-]/
首先,我尝试了一种策略,将表达式组合成组,例如:
/(<%@)|(<%--)|(<!--)|(<[a-z:-])/
这样我就可以找出哪个匹配的组不是未定义的。但问题是,当某些子表达式包含组或反向引用时。
所以我的问题是:
有谁知道在一个字符串中查找与多个正则表达式匹配的好而合理的方法吗?
最佳答案
是否有任何特殊原因导致您不能对输入进行标记,然后测试每个标记的开头以查看它是什么类型以便突出显示?我觉得你想多了。一个简单的 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。我将此作为练习留给读者。
关于javascript - 同时使用多个正则表达式进行测试(用于句法分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1974594/