用Java中的Rhino解析和替换Javascript标识符

时间:2010-04-19 01:06:26

标签: java javascript rhino

假设我让用户使用Javascript编写条件,用户可以编写条件来执行测试并返回true或false。 E.g:

INS>5 || ASTO.valueBetween(10,210)

我想找到用户编写的脚本中使用的变量。我试图找到一种方法来获取Java中的标识符名称。 Rhino图书馆没有多大帮助。但是我发现通过处理异常我可以获得所有标识符。所以这个问题就解决了。

所以一切都很好,但有一个小问题。如何用数字标识符替换这些标识符?例如。 INS应为_234ASTO应为_331

INSASTO等是我数据库中的实体。我想替换它们,因为名称可能会改变。我可以使用替换来做到这一点,但这并不容易,因为:

  1. 它应该是可逆的。例如。 ASTO再次_234_234再次ASTO
  2. _23替换MPLAH也可能会取代_234。这可以用regexp以某种方式修复。
  3. 如果评论部分中有_23怎么办?很少发生,但可能/* _23 fdsafd ktl */。它也应该被替换。
  4. 如果是功能名称怎么办?例如。 _32() {}。也很少见,但不应该更换。
  5. 如果它包含在""''
  6. 中会怎样?

    我确信还有很多案例。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Parhs - 你真正需要的是一个JavaScript解析器。基本上,你将重新实现Rhino的部分虽然理论上可能Rhino已经有钩子来做你需要的东西(我不熟悉它所以不确定);或者您可以扩展Rhino,因为它的来源是Mozilla 100%可用的。另一个可能的方向是谷歌的GWT。