2009-05-27 15 views
0

は、私は次のようなHTMLがあります。javascriptとregexとのマッチング方法は?

<span id="UnitCost5">$3,079.95 to $3,479.95</span> 

を、私はすべての番号が一致して取得するにはJavascriptと正規表現を使用します。 3,079.95と3,479.95

注テキストは私がかのうなどの一般的なようにソリューションを必要と異なることがあり、それはこのようになりますことがあります:

<span id="UnitCost5">$3,079.95 And Price $3,479.95</span> 

答えて

3

は、だから私は私のスクリプト機能を返すようにしたいですこれは、あなたが探し数字は小数点ドットで始めることができると仮定し

\.?\d[\d.,]* 

すべての数字がマッチしたことになります。そうでない場合、これはうまくいくでしょう。誤認も少なくなります:

\d[\d.,]* 

番号の書式設定には、異なるローカルの習慣が存在することに注意してください。

処理したいHTMLノードのテキスト値を取得するための適切な手段を使用し、HTML解析がエクササイズに含まれていないと仮定します。

+0

私はそれVAR価格を書きました= myElement.innerHTML.match(/ \。?\ d [\ d。、* */g); と/ gは、最初の価格だけでなくすべての価格を取得します。 –

+0

innerHTMLにHTMLコードが含まれていないことが絶対に確実でない限り、innerText(またはtextContent)を使用することをお勧めします。 JavaScriptライブラリを用意している場合は、それを使用してテキストコンテンツブラウザを個別に保持することができます。 – Tomalak

0

非常に簡単な解決策は次のとおりです。それはまた、$..44,.777のようないくつかの無効な数字の文字列と一致することに注意してください。

\$[0-9,.]+ 
0
(function() { 
    var reg = /\$([\d\.,]+)\s[\w\W]+\s\$([\d\.,]+)$/; 


    // this function used to clean inner html 
    function trim(str) { 
     var str = str.replace(/^\s\s*/, ''), 
      ws = /\s/, 
      i = str.length; 
     while (ws.test(str.charAt(--i))); 
     return str.slice(0, i + 1); 
    } 

    function getNumbersFromElement(elementId) { 
     var el = document.getElementById(elementId), 
      text = trim(el.innerHTML), 
      firstPrice, 
      secondPrice, 
      result; 

     result = reg.exec(text); 

     if (result[1] && result[2]) { 
      // inside this block we have valid prices 
      firstPrice = result[1]; 
      secondPrice = result[2]; 
      // do whatever you need 
      return firstPrice + ' AND ' + secondPrice; 
     } else { 
      return null; // otherwise 
     } 
    } 
    // usage: 
    getNumbersFromElement('UnitCost5'); 
})(); 
1

あなたはそうでないあなたも、IDで5になるだろう、すべて番号をキャプチャする必要はありません。ここで

$#,###.##は、そのための式を行く:私はあなたがこのように見ている番号探しているものを、推測

/\$[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?/ 
  • \$ドル記号
  • [0-9]{1,3}ワン3桁に
  • (,[0-9]{3})* [オプション]:数字カンマが先行トリプレット、
  • (\.[0-9]+)? [オプション]:期間が先行してもより多くの桁は、
0

以下では、文字列

function getPrices(str) { 
    var reg = /\$([\d,.]+)/g; 
    var prices =[]; 
    var price; 
    while((price = reg.exec(str))!=null) { 
     prices.push(price); 
    } 
    return prices; 
} 

で見つかったすべての価格の配列を返します。編集:正規表現自体がいくつかの誤検出を返す可能性があることに注意してください。

1
/(?:\d{1,3},)*\d{1,3}(?:\.\d+)?/g; 

説明のための部品への帽子:

  • (?:¥d {1,3}、*千分区切りで区切られた数字に一致する
  • \ d {1,3} - 小数点の前の数字に一致する
  • (?:。\ d +) - 小数点以下の任意の数と一致し
  • 旗「G」 -

あなたはこのようにそれを使用することができ、文字列内のすべての一致を検索するグローバルな検索を行います。

var regex = /(?:\d{1,3},)*\d{1,3}(?:\.\d+)?/g; 
var numbers = "$3,079.95 And Price $3,479.95".match(regex); 
// numbers[0] = 3,079.95 
// numbers[1] = 3,479.95 
+0

これは文字列1,1,1,1.0と一致します – soulmerge

関連する問題