2016-09-29 82 views
0

我使用Apache驼峰2.11和骆驼脚本2.2的JavaScript支持春季DSL。JavaScript的正则表达式替换不工作在Apache骆驼

我想用组来做一个正则表达式替换,但这似乎并不适用于骆驼。

如: - 在变换,下面的工作

<javaScript>request.body.toString().replace("Y","X")</javaScript> 

即更改YZ到XZ

但以下不会: -

<javaScript>request.body.toString().replace("/(Y)(.*)$/g","\$1")</javaScript> 

即。更改YZXXX为Y

我已经测试过的正则表达式本身在https://regex101.com/,所以我不相信它在正则表达式本身

现在有语法问题有可能是骆驼脚本只能提供部分支持javascript。但我不确定情况是否如此。有任何想法吗?

回答

0

您需要使用正则表达式,而不是看起来像正则表达式的字符串。比较:

错误:

request.body.toString().replace("/(Y)(.*)$/g","\$1") 

正确:

request.body.toString().replace(/(Y)(.*)$/g, "\$1") 

话虽这么说,反斜线在替换模式是多余的。 "$1"将是正确的。

+0

没有..我也试过,以及张贴之前......但谢谢! – Shahed

+0

你以前可能已经尝试过了,但是就JS而言,第一行代码不起作用,第二行代码行不通。 – Tomalak

1

我发现这个问题:-)

的问题是: - 我是假设骆驼JavaScript可以使用JavaScript功能......而事实上,它调用Java函数。

将代码更改为java语法(使用正则表达式的java语法调用replaceAll()函数)解决了该问题。

+0

[Camel supports JavaScript](http://camel.apache.org/javascript.html)以及''元素中的代码实际上也是* JS。所以我有点怀疑你的解决方案实际上是正确的。 – Tomalak

+0

那么它对我有用,而且javascript确实允许调用java函数..所以它可能是我称为javascript函数的方式的问题,或者是与Spring DSL一起使用javascript的限制? 在任何情况下,我会通过尝试调用外部简单Native JavaScript函数来查看这些工作是否有效.. – Shahed

+0

好吧,这可能是由于request.body对象是一个java对象而不是JavaScript对象... – Shahed