2011-02-06 8 views
1

制限されたJavascript環境で作業しており、xmlパーサーまたはDOMアクセス権がありません。私は、文字列[]値を取得する必要がありRegEx to parse complex xml javascript

<gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile">206 555 1212</gd:phoneNumber> 

形式はこのように書きモバイル、206 555 1212

値が常に同じ毎回しかし、タグは異なるであろう。

それから私は、例えば値を交換できるようにする必要があります:家庭、555-555-5555

が、これは正規表現で行うことができますか?

+2

Jamie Zawinski、1997:「問題に直面したときに「わかっている、私は正規表現を使う」と思う人もいます。 ... :) – crowne

+0

atrib/valのコンテキストでは、どの部分が同じままですか? google.com/g/...#mobileはどうですか?そのタグの中に他のattr/valがありますか?これはXMLの文脈でですか? – sln

+0

もちろん、これは正規表現で行うことができます。しかし、Javascriptの正規表現の実装はあまり強力ではありません。 Unicodeに正しく対処できません。それでも、[this](http://stackoverflow.com/questions/4284176/doubt-in-parsing-data-in-perl-where-am-i-going-wrong/4286326#4286326)はあなたにいくつかのアイデアを提供するかもしれません。 – tchrist

答えて

0

を見てみましょうこれは私がこれまで持っているものであり、それは動作しますが、より良い方法はありますか?

"<gd:phoneNumber rel=http://schemas.google.com/g/2005#mobile>206 555 1212</gd:phoneNumber>".replace(/#.*</g, '#home>111-111-1111<') 

戻り値:

"<gd:phoneNumber rel=http://schemas.google.com/g/2005#home>111-111-1111</gd:phoneNumber>" 

だから私は、新しい値に

"<gd:phoneNumber rel=http://schemas.google.com/g/2005#mobile>206 555 1212</gd:phoneNumber>".match(/#.*</g)[0].replace(/[#<]/g, "").split(/>/) 

戻って注入することができます:[ "モバイル"、 "206 555 1212"] を

私を許可します値を得るために

0

これはマッチを取り出し、交換実行:

var testString = '<gd:phoneNumber rel=http://schemas.google.com/g/2005#mobile>206 555 1212</gd:phoneNumber>'; 

var regex = /.*#(\w+)">(.*)</i; 

// matches[1] will be "mobile" and matches[2] will be "206 555 1212" 
var matches = regex.exec(testString); 

// Replace #mobile with #home 
testString = testString.replace(matches[1], 'home'); 

// Replace the phone number with 555 555 5555 
testString = testString.replace(matches[2], '555 555 5555'); 

これらの単純な置換があれば、それらの値とXML要素のコンテンツの残りの部分(例えば間には重複がありませんように動作しますschemas.google.comのURLにmobileという文字列が#mobileの前のどこかに含まれていた場合、これは機能しません)。それが間違いない限り、これは置換を行うより簡単な方法です。

+0

非常にいいです。ありがとうございました!!! – James

1

fast-xml-parserは、正規表現のみに基づいています。これをプロジェクトに含めることができます。

//var xml2json = require('fast-xml-parser').parse; 
var jsonObj = xml2json('<gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile">206 555 1212</gd:phoneNumber>', {ignoreNameSpace : true}); 
console.log(jsonObj.phoneNumber); // "206 555 1212" 

それとも、正規表現を自分で作る場合、私は@DaveWardがreplaceを使用するのではなく、彼の答えで提案されているように、あなたがマッチする文字列をキャプチャするために正規表現を使用することをお勧めします。