0

我有以下字符串:

Source: "HKID:A1234567~PKey:00888880~DOC:TKWC033330"

Regex:  .*(HKID:.*?)(.+?)((?=~)|\s|\z)

当我在 JavaScript 正则表达式测试站点进行测试时,我得到了 A1234567,所以一切都很好。

我把这个表达式放在我 Mirth 频道的一个 javascript 转换器中。但我得到的 hk_id 值是空字符串或空字符串。

我尝试过的事情:

  1. 使用该功能re.match(),但这给了我错误,笑声说 cannot find function match in object...
  2. 我试图在下面的正则表达式周围加上单引号,或者/
  3. 我试图将我的正则表达式简化为最简单的形式来测试它re.exec('.*'),但我仍然得到空值或空值。
  4. 我没有尝试运行RegExp.$1,而是仅尝试返回 m,但没有产生任何差异。

我认为这可能归结为我如何逃避角色,但我找不到任何关于此的 Mirth 文档,如果您有任何见解,他们将不胜感激。

var hk_id = Find_HKID();
var xml_msg = 
'<?xml version="1.0" encoding="utf-8" ?> <XML><Barcode="'+hk_id+'" /></XML>';

var sResp = ResponseFactory.getSuccessResponse(xml_msg)
responseMap.put('Response', sResp);


function Find_HKID() 
{
   var test = 'HKID:A1234567~PKey:00888880~DOC:TKWC033330'
   var re = new RegExp(test);
   var m = re.exec('.*(HKID:.*?)(.+?)((?=~)|\s|\z)');
   return RegExp.$1 + RegExp.$2 + RegExp.$3 + "";
}
4

1 回答 1

1

You confused regex and and test string, it should be:

function Find_HKID() 
{
   var test = 'HKID:A1234567~PKey:00888880~DOC:TKWC033330'
   var re = new RegExp('.*(HKID:.*?)(.+?)((?=~)|\s|\z)');
   var m = re.exec(test);
   return RegExp.$1 + RegExp.$2 + RegExp.$3 + "";
}

Now it works like a charm:-D

And btw. you should not use new RegExp(), it's slow and ugly. Use the regex directly:

var re = /.*(HKID:.*?)(.+?)((?=~)|\s|\z)/;

Edit: like Ωmega proposed this regex might work for you too, and is much more precise:

var re = /.*(HKID:.*?)[~\s]/
于 2012-10-22T16:55:55.523 回答