0

私は次の文字列を持っています:

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

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

JavaScript正規表現テストサイトでこれをテストすると、 A1234567が得られたので、すべて問題ありません。

この式をMirthチャネルのjavascriptトランスフォーマーに入れました。しかし、私が返すhk_id値は、nullまたは空の文字列です。

私が試したこと:

  1. 関数を使用しますre.match()が、これは私にエラーを与えます、とmirthは言います cannot find function match in object...
  2. 以下の正規表現を一重引用符で囲んでみました。/
  3. 正規表現をテストするための最も単純な形式に縮小しようとしましたがre.exec('.*')、それでも空またはnull値を取得します。
  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

正規表現とテスト文字列を混同しました。次のようになります。

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 + "";
}

今では魅力のように機能します:-D

そしてところで。あなたは使うべきではありませんnew RegExp()、それは遅くて醜いです。正規表現を直接使用します。

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

編集:Ωmegaが提案したように、この正規表現はあなたにも役立つかもしれません、そしてはるかに正確です:

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