2012-01-19 5 views
0

私はバグの正規表現の問題があり、それを解決する手がかりがありません。複数の正規表現のサブパターンの任意のマッチング

私はテキスト付きの入力フィールドを持っており、その中から特定の値を抽出したいのです。 タイトル、説明、価格、特別価格を抽出したいと思います。入力用

例:プレーンテキストをタイトルとして懸念されているもの

  • すべて。
  • ハッシュ内のすべて(#記述はここにあります)は説明と見なされます。
  • $ 23.49は価格とみなされ、%$ 19.99は特別価格と一致します。

CoffeeScriptのパターン私が使用している:

pattern = /// 
    ([^$]+) 
    (#(.+?)#+) 
    ([\$]\d+\. \d+) 
    ([\%\$]\d+\. \d+) 
    /// 
    params = [title,description,oldPrice,newPrice]=input_txt.match(pattern)[1..4] 

それは動作しません。与えられたシーケンス内のすべての値を入力して、要求された部分文字列を提供する必要がある場合は、それが動作するはずです。

シーケンスの内容に関係なく、シーケンスが抽出された場合は、sequumentsを抽出することができます。 文字列の任意のシーケンスを抽出するにはどうすればいいですか... EDIT/// 私はいくつかの例が提供

exmp1:

Kindle #Amazon's ebook reader# $79.00 

これは

title:Kindle 
description: Amazon's ebook reader 
oldPrice:$79.00 
として抽出する必要があります

exmp2:これは

に抽出されるべき

$100.00 Just dance 3 #for XBox# 

Nike Sneaker's $109.00 %$89.00 

これは

title:Nikes Sneaker's 
oldPrice:$109.00 
newPrice:$89.00 

exmp3として抽出されるべきです

title: Just dance 3 description: for XBox oldPrice:$100.00 

すべてのヘルプは素晴らしいことだ...

+0

解析しようとしている文字列の例をいくつか挙げてください。あなたが任意の順序で物事を一致させたい場合は、複数の異なる正規表現を使用する必要があります。 – jfriend00

+0

私はいくつかの例文を提供しました... –

答えて

4

正規文法の性質は、それが難しいあなたの問題を解決することができます。元

  • マッチから(文字列置換)

    1. マッチ/#(.+?)#+/と結果文字列を削除します。最も簡単な解決策回避策として、ちょうどあなたの正規表現を4回実行することです/ [\%\ $] \ d +。 \ d + /そして元の文字列から結果の文字列を削除します。
    2. [/ $] \ d +。 \ d +/...あなたはパターンを取得します
    3. これで、オリジナルに残っているのはタイトルです。
  • 1

    あなたはマッチのそれぞれ別個の部品を取り除く探し、このコードを使用することができます:http://jsfiddle.net/jfriend00/d8NNr/:あなたはここにアクションでデモを見ることができ、

    function extractParts(str) { 
        var parts = {}; 
    
        function removePiece(re) { 
         var result; 
         var matches = str.match(re); 
         if (matches) { 
          result = matches[1]; 
          str = str.replace(re, ""); 
         } 
         return(result); 
        } 
    
        // find and remove each piece we're looking for 
        parts.description = removePiece(/#([^#]+)#/);  // #text# 
        parts.oldPrice = removePiece(/[^%](\$\d+\.\d+)/); // $4.56 
        parts.newPrice = removePiece(/%(\$\d+\.\d+)/);  // %$3.78 
        // fix up whitespace 
        parts.title = str.replace(/\s+/g, " ").replace(/^\s+/, "").replace(/\s+$/, ""); 
        return(parts); 
    } 
    
    var pieces = extractParts("Kindle #Amazon's ebook reader# $79.00"); 
    

    をと。

    関連する問題