2017-03-10 1 views
0

専門用語についてはわかりませんが、達成したいことを説明してみましょう。私は多くのHTMLコードを持っています。ここでは、名前とid属性の一部を置き換える必要があります。JavaScriptで結果を埋め込まずに正規表現を組み合わせる

これらの属性には、VALUE[1][0][question][0],VALUE[1][0][answer][0]などの文字列を含めることができますが、MEDIA_1openMedia(1, '', 'title')も含めることができます。私は時々ようにopenMedia(2, '', 'title')としてMEDIA_2またはopenMedia(1, '', 'title')[1]またはMEDIA_1[0]秒と最後を交換する必要があり、これらの文字列で

、単純な(またはしない)ものを維持するために、私は次の正規表現を作ってみた:

/(VALUE)\[(\d+)\]\[(\d+)\]\[(.*?)\]\[(\d+)\]|(MEDIA)_(\d+)|(openMedia)\((\d+),/gm 

私は結果をループのことができるようにするためにこのようなopenMediaなど、個々の接頭辞を捕獲しようとしていると前記プレフィックスに従って置換を行う。私は十分に明確であることを望む。私は結果をループに次のコードを使用します。

Array [ "VALUE[1][0][question][0]", "VALUE", "1", "0", "question", "0", undefined, undefined, undefined, undefined, undefined, undefined ] 
Array [ "openMedia(1,", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "openMedia", "1" ] 

がどのように私は「パディングされていない」結果を得るのです:

while ((m = regex.exec(html)) !== null) { 
    if (m.index === regex.lastIndex) { 
    regex.lastIndex++; 
    } 
    console.log(m); 
} 

私の問題は、mは時々このように見えるということですか?私は単純に配列が

Array [ "openMedia(1,", "openMedia", "1" ] 

と期待しています。

+1

あなたの質問は、あなたが 'から削除undefined'値をしたいという多くあるように思わ

m = m.filter(x => x !== undefined) 

これは、これを削減します配列: 'arr.filter(x => x!== undefined)' – trincot

+0

オプションは一致しないときは未定義を返します。未定義の結果を除外することができます。 'str.match(re).filter(x => x)' – epascarello

+0

@trincotは30秒後に私を打ち負かしました。 :) – epascarello

答えて

1

undefinedの値を配列から削除したいと思っているようです。これは、あなたはfilterで行うことができます。

[ "openMedia(1,", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "openMedia", "1" ] 

へ:

[ "openMedia(1,", "openMedia", "1" ] 
+0

また、フィルタ関数についても分かりませんでした。おかげさまで、サブパックの質問に対する素晴らしい答えです;) – ynamite

関連する問題